

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# GraphQL ミューテーションを使用して AWS AppSync コンソールの DynamoDB テーブルにデータを追加する
<a name="add-data-with-graphql-mutation"></a>

次のステップは、GraphQL ミューテーションを使用して空の DynamoDB テーブルにデータを追加することです。ミューテーションは GraphQL の基本的な操作タイプの 1 つです。これらはスキーマで定義され、データソース内のデータを操作できます。REST API に関しては、これらは `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/ja_jp/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/ja_jp/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!){}` は、その操作の 1 つによるミューテーションです。`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/ja_jp/appsync/latest/devguide/images/explorer-example-3.png)

操作を要約すると、GraphQL エンジンがレコードを解析し、リゾルバーがそのレコードを Amazon DynamoDB テーブルに挿入しました。これも DynamoDB コンソールで確認できます。`id` 値を渡す必要がないことに注意してください。`id` が生成され、結果に返されます。この例では、DynamoDB リソースに設定されているパーティションキーに対して、GraphQL リゾルバーの `autoId()` 関数を使用しているためです。リゾルバーを構築する方法については、別のセクションで説明します。戻り `id` 値を書き留めておきます。次のセクションでは、GraphQL クエリでデータを取得するときに使用します。