从没有指令的 GraphQL 架构开始
您可以从空的 Neptune 数据库开始,使用没有指令的 GraphQL 架构来创建数据并进行查询。以下命令会自动创建 Amazon 资源来执行此操作:
neptune-for-graphql \ --input-schema-file(your GraphQL schema file)--create-update-aws-pipeline \ --create-update-aws-pipeline-name(name for your new GraphQL API)\ --create-update-aws-pipeline-neptune-endpoint(your Neptune database endpoint):(port number)\ --output-resolver-query-https
GraphQL 架构文件必须包含 GraphQL 架构类型,如下面的 TODO 示例所示。该实用程序会分析您的架构,并根据您的类型创建扩展版本。它为存储在图形数据库中的节点添加查询和突变,如果您的架构具有嵌套类型,则它会添加作为边缘存储在数据库中的类型之间的关系。
该实用程序创建 AppSync GraphQL API 以及所需的所有 Amazon 资源。其中包括一对 IAM 角色和一个包含 GraphQL 解析器代码的 Lambda 函数。命令完成后,您可以在 AppSync 控制台中找到具有您指定的名称的新 GraphQL API。要对其进行测试,请使用 AppSync 菜单中的查询。
以下示例说明了其工作原理:
Todo 示例,从没有指令的 GraphQL 架构开始
在这个例子中,我们从一个没有指令的 Todo GraphQL 架构开始(可以在 ???samples??? 目录中找到该架构)。它包括以下两种类型:
type Todo { name: String description: String priority: Int status: String comments: [Comment] } type Comment { content: String }
此命令处理 Todo 架构和空 Neptune 数据库的端点,以在 Amazon AppSync 中创建 GraphQL API:
neptune-for-graphql / --input-schema-file ./samples/todo.schema.graphql \ --create-update-aws-pipeline \ --create-update-aws-pipeline-name TodoExample \ --create-update-aws-pipeline-neptune-endpoint(empty Neptune database endpoint):(port number)\ --output-resolver-query-https
该实用程序在名为 TodoExample.source.graphql 的输出文件夹中创建一个新文件,并在 AppSync 中创建 GraphQL API。该实用程序推理以下内容:
在 Todo 类型中,它为新的 CommentEdge 类型添加了
@relationship。这指示解析器使用名为 CommentEdge 的图形数据库边缘将 Todo 连接到 Comment。它添加了一个名为 TodoInput 的新输入来帮助查询和突变。
它为每种类型(Todo、Comment)添加了两个查询:一个查询用于使用输入中列出的一个
id或任何一个类型字段检索单个类型,另一个查询用于检索使用该类型的输入进行筛选的多个值。它为每种类型添加了三个突变:创建、更新和删除。要删除的类型是使用
id或该类型的输入来指定的。这些突变会影响存储在 Neptune 数据库中的数据。它为连接添加了两个突变:连接和删除。它们将 Neptune 使用的起始顶点和结束顶点的节点 ID 作为输入,连接是数据库中的边缘。
解析器通过名称识别查询和突变,但您可以按如下所示对其进行自定义。
以下是 TodoExample.source.graphql 文件的内容:
type Todo { _id: ID! @id name: String description: String priority: Int status: String comments(filter: CommentInput, options: Options): [Comment] @relationship(type: "CommentEdge", direction: OUT) bestComment: Comment @relationship(type: "CommentEdge", direction: OUT) commentEdge: CommentEdge } type Comment { _id: ID! @id content: String } input Options { limit: Int } input TodoInput { _id: ID @id name: String description: String priority: Int status: String } type CommentEdge { _id: ID! @id } input CommentInput { _id: ID @id content: String } input Options { limit: Int } type Query { getNodeTodo(filter: TodoInput, options: Options): Todo getNodeTodos(filter: TodoInput): [Todo] getNodeComment(filter: CommentInput, options: Options): Comment getNodeComments(filter: CommentInput): [Comment] } type Mutation { createNodeTodo(input: TodoInput!): Todo updateNodeTodo(input: TodoInput!): Todo deleteNodeTodo(_id: ID!): Boolean connectNodeTodoToNodeCommentEdgeCommentEdge(from_id: ID!, to_id: ID!): CommentEdge deleteEdgeCommentEdgeFromTodoToComment(from_id: ID!, to_id: ID!): Boolean createNodeComment(input: CommentInput!): Comment updateNodeComment(input: CommentInput!): Comment deleteNodeComment(_id: ID!): Boolean } schema { query: Query mutation: Mutation }
现在,您可以创建和查询数据。以下是用于测试新的 GraphQL API(在本例中名为 TodoExampleAPI)的 AppSync 查询控制台的快照。在中间的窗口中,Explorer 显示查询和突变的列表,您可以从中挑选查询、输入参数和返回字段。此屏幕截图显示了使用 createNodeTodo 突变创建 Todo 节点类型的过程:
此屏幕截图显示使用 getNodeTodos 查询来查询所有 Todo 节点:
使用 createNodeComment 创建 Comment(注释)后,您可以使用 connectNodeTodoToNodeCommentEdgeCommentEdge 突变通过指定其 ID 来连接它们。以下是检索 Todo 及其所附注释的嵌套查询:
如果要按照使用指令中所述对 TodoExample.source.graphql 文件进行更改,则可以使用编辑后的架构作为输入并再次运行该实用程序。然后,该实用程序将相应地修改 GraphQL API。