从没有指令的 GraphQL 架构开始 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从没有指令的 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 函数。命令完成后,您可以使用您在控制台中指定的名称找到一个新的 GraphQL API。 AppSync 要对其进行测试,请在 AppSync 菜单中使用查询

以下示例说明了其工作原理:

Todo 示例,从没有指令的 GraphQL 架构开始

在这个例子中,我们从一个没有指令的 Todo GraphQL 架构开始(可以在 ???samples??? 目录中找到该架构)。它包括以下两种类型:

type Todo { name: String description: String priority: Int status: String comments: [Comment] } type Comment { content: String }

此命令处理待办事项架构和空的 Neptune 数据库的端点,以便在以下位置创建 GraphQL API:Amazon AppSync

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,并在中创建 GraphQL API。 AppSync该实用程序推理以下内容:

  • 在待办事项类型中,它@relationship为一种新 CommentEdge 类型添加了。这指示解析器使用名为的图形数据库边缘将 Todo 连接到 Comment。 CommentEdge

  • 它添加了一个名 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 的 Queries 控制台的快照,在本例TodoExampleAPI中命名。 AppSync在中间的窗口中,Explorer 显示查询和突变的列表,您可以从中挑选查询、输入参数和返回字段。此屏幕截图显示了使用 createNodeTodo 突变创建 Todo 节点类型的过程:

屏幕截图显示 AppSync Queries 控制台正在创建 Todo 节点

此屏幕截图显示使用 getNodeTodos 查询来查询所有 Todo 节点:

屏幕截图显示 AppSync Queries 控制台正在查询 Todo 节点

使用 createNodeComment 创建 Comment(注释)后,您可以使用 connectNodeTodoToNodeCommentEdgeCommentEdge 突变通过指定其 ID 来连接它们。以下是检索 Todo 及其所附注释的嵌套查询:

屏幕截图显示了用于在 Queries 控制台中检索 Todo 及其所附评论的嵌套 AppSync 查询

如果要按照使用指令中所述对 TodoExample.source.graphql 文件进行更改,则可以使用编辑后的架构作为输入并再次运行该实用程序。然后,该实用程序将相应地修改 GraphQL API。