

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 GraphQL 變動將資料新增至 AWS AppSync 主控台中的 DynamoDB 資料表
<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** 索引標籤中，您可能會看到已在查詢編輯器中定義的數個變動和查詢：  
![\[Explorer tab showing a dropdown menu with mutation and query options like createTodo and deleteTodo.\]](http://docs.aws.amazon.com/zh_tw/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_tw/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`、`where`、 `when`和 `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_tw/appsync/latest/devguide/images/explorer-example-3.png)

為了摘要說明操作，GraphQL 引擎會剖析記錄，而解析程式會將記錄插入您的 Amazon DynamoDB 資料表。同樣地，您可以在 DynamoDB 主控台中驗證此項目。請注意，您不需要傳入 `id`值。在結果中`id`產生並傳回 。這是因為範例針對 DynamoDB 資源上設定的分割區索引鍵，在 GraphQL 解析程式中使用 `autoId()`函數。我們將介紹如何在不同的區段中建置解析程式。請記下傳回`id`的值；您將在下一節中使用它來擷取具有 GraphQL 查詢的資料。