

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

# 从没有指令的 GraphQL 架构开始
<a name="tools-graphql-start-from-schema"></a>

您可以从空的 Neptune 数据库开始，使用没有指令的 GraphQL 架构来创建数据并进行查询。以下命令会自动创建 AWS 资源来执行此操作：

```
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 以及所需的所有 AWS 资源。其中包括一对 IAM 角色和一个包含 GraphQL 解析器代码的 Lambda 函数。命令完成后，您可以使用您在控制台中指定的名称找到一个新的 GraphQL API。 AppSync 要对其进行测试，请在 AppSync 菜单中使用**查询**。

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

## Todo 示例，从没有指令的 GraphQL 架构开始
<a name="tools-graphql-todo-example"></a>

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

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

type Comment {
  content: String
}
```

此命令处理待办事项架构和空的 Neptune 数据库的端点，以便在以下位置创建 GraphQL API： AWS 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 作为输入，连接是数据库中的边缘。

解析器通过名称识别查询和突变，但您可以按[如下](tools.md)所示对其进行自定义。

以下是 `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 节点\]](http://docs.aws.amazon.com/zh_cn/neptune/latest/userguide/images/todoCreate.png)


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

![\[屏幕截图显示 AppSync Queries 控制台正在查询 Todo 节点\]](http://docs.aws.amazon.com/zh_cn/neptune/latest/userguide/images/todoGetTodos.png)


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

![\[屏幕截图显示了用于在 Queries 控制台中检索 Todo 及其所附评论的嵌套 AppSync 查询\]](http://docs.aws.amazon.com/zh_cn/neptune/latest/userguide/images/todoNestedQuery.png)


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