

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

# 在控制台中使用 GraphQL 突变向 DynamoDB 表添加数据 AWS AppSync
<a name="add-data-with-graphql-mutation"></a>

下一步是使用 GraphQL 变更将数据添加到空白 DynamoDB 表中。变更是 GraphQL 中的基本操作类型之一。它们是在架构中定义的，可用于处理数据来源中的数据。就 REST 而言 APIs，这些操作与`PUT`或之类的操作非常相似`POST`。

**将数据添加到您的数据来源**

1. 如果您尚未执行此操作，请登录 AWS 管理控制台 并打开[AppSync 控制台](https://console.aws.amazon.com/appsync/)。

1. 从表中选择您的 API。

1. 在左侧的选项卡中，选择**查询**。

1. 在表左侧的**资源管理器**选项卡中，您可能会看到在查询编辑器中已定义的多个变更和查询：  
![\[Explorer tab showing a dropdown menu with mutation and query options like createTodo and deleteTodo.\]](http://docs.aws.amazon.com/zh_cn/appsync/latest/devguide/images/explorer-example-1.png)
**注意**  
该变更实际作为 `Mutation` 类型包含在您的架构中。它具有以下代码：  

   ```
   type Mutation {
   	createTodo(input: CreateTodoInput!): Todo
   	updateTodo(input: UpdateTodoInput!): Todo
   	deleteTodo(input: DeleteTodoInput!): Todo
   }
   ```
正如您看到的一样，此处的操作与查询编辑器中的操作类似。

   AWS AppSync 这些都是根据我们之前定义的模型自动生成的。这个例子将使用`createTodo`变异来向我们的*TodoAPITable*表中添加条目。

1. 在 `createTodo` 变更下面展开以选择 `createTodo` 操作：  
![\[Expanded createTodo mutation showing input fields like description, id, name, when, and where.\]](http://docs.aws.amazon.com/zh_cn/appsync/latest/devguide/images/explorer-example-2.png)

   启用所有字段的复选框，如上图所示。
**注意**  
您在此处看到的属性是变更的各种可修改元素。您的 `input` 可以被视为 `createTodo` 的参数。具有复选框的各种选项是一些字段，它们是在执行操作后在响应中返回的。

1. 在屏幕中央的代码编辑器中，您会注意到该操作显示在 `createTodo` 变更下面：

   ```
   mutation createTodo($createtodoinput: CreateTodoInput!) {
     createTodo(input: $createtodoinput) {
       where
       when
       name
       id
       description
     }
   }
   ```
**注意**  
为了正确解释该代码片段，我们还必须查看架构代码。声明 `mutation createTodo($createtodoinput: CreateTodoInput!){}` 是具有操作之一 (`createTodo`) 的变更。完整的变更位于架构中：  

   ```
   type Mutation {
   	createTodo(input: CreateTodoInput!): Todo
   	updateTodo(input: UpdateTodoInput!): Todo
   	deleteTodo(input: DeleteTodoInput!): Todo
   }
   ```
返回到编辑器中的变更声明，参数是一个名为 `$createtodoinput` 的对象，所需的输入类型为 `CreateTodoInput`。请注意，`CreateTodoInput`（以及变更中的所有输入）也是在架构中定义的。例如，以下是 `CreateTodoInput` 的样板代码：  

   ```
   input CreateTodoInput {
   	name: String
   	when: String
   	where: String
   	description: String
   }
   ```
它包含我们在模型中定义的字段，即 `name`、`when`、`where` 和 `description`。  
返回到编辑器代码，在 `createTodo(input: $createtodoinput) {}` 中，我们将输入声明为 `$createtodoinput`，还会在变更声明中使用它。我们这样做是因为，这允许 GraphQL 根据提供的类型验证我们的输入，并确保它们与正确的输入一起使用。  
编辑器代码的最后一部分显示执行操作后在响应中返回的字段：  

   ```
   {
       where
       when
       name
       id
       description
     }
   ```

   在该编辑器下面的**查询变量**选项卡中，具有一个通用 `createtodoinput` 对象，它可能包含以下数据：

   ```
   {
     "createtodoinput": {
       "name": "Hello, world!",
       "when": "Hello, world!",
       "where": "Hello, world!",
       "description": "Hello, world!"
     }
   }
   ```
**注意**  
这是我们为前面提到的输入分配值的位置：  

   ```
   input CreateTodoInput {
   	name: String
   	when: String
   	where: String
   	description: String
   }
   ```

   添加我们希望放入 DynamoDB 表中的信息以更改 `createtodoinput`。在该示例中，我们希望创建一些 `Todo` 项目以作为提醒：

   ```
   {
     "createtodoinput": {
       "name": "Shopping List",
       "when": "Friday",
       "where": "Home",
       "description": "I need to buy eggs"
     }
   }
   ```

1. 选择编辑器顶部的**运行**。在下拉列表中选择 **createTodo**。在编辑器右侧，您应该会看到响应。它可能如下所示：

   ```
   {
     "data": {
       "createTodo": {
         "where": "Home",
         "when": "Friday",
         "name": "Shopping List",
         "id": "abcdefgh-1234-1234-1234-abcdefghijkl",
         "description": "I need to buy eggs"
       }
     }
   }
   ```

   如果您导航到 DynamoDB 服务，您现在会在数据来源中看到一个包含以下信息的条目：  
![\[TodoAPITable interface showing a completed scan with 1 item returned in a table format.\]](http://docs.aws.amazon.com/zh_cn/appsync/latest/devguide/images/explorer-example-3.png)

简要说明一下该操作，GraphQL 引擎解析记录，然后解析器将其插入到您的 Amazon DynamoDB 表中。同样，您可以在 DynamoDB 控制台中验证这一点。请注意，您不需要传入 `id` 值。将生成一个 `id` 并在结果中返回。这是因为，对于 DynamoDB 资源上设置的分区键，该示例在 GraphQL 解析器中使用 `autoId()` 函数。我们将在另一节中介绍如何构建解析器。记下返回的 `id` 值；您在下一节中使用该值通过 GraphQL 查询检索数据。