GraphQLのミューテーション:動く例で解説

GraphQLのミューテーション

GraphQLのミューテーション:構文、変数、入力型 | We.Inc

データを作成、更新、削除するGraphQLミューテーションを書きましょう。オペレーションの構文、$変数、入力オブジェクト型、返すべき値、そしてエラーや部分的な成功がどう見えるかを解説します。

GraphQLのミューテーションは、データを変更するために送るオペレーションです。mutationキーワードで始まり、スキーマのMutation型のフィールドを呼び出し、引数(通常は$変数に入れた1つの入力オブジェクト)を渡し、結果のどのフィールドを返すかを選択します。トップレベルのミューテーションのフィールドは、並列ではなく1つずつ順番に実行されます。

ミューテーション構文の各部分

下のビルダーでは、小さなタスクリストを例に、完全なミューテーションを確認できます。オペレーション、コードが一緒に送る変数のJSON、そして典型的なレスポンスです。タスクのタイトルを入力すると変数が更新されるので、対応するスキーマに対してそのまま実行できるリクエストをコピーできます。

よくある質問

クエリとミューテーションの違いは何ですか?

どちらも同じ構文を使い、どちらもデータを返せます。慣例として、クエリは読み取りだけを行い、ミューテーションは書き込みを行います。実行のルールも異なり、クエリのフィールドは並列に解決されることがありますが、トップレベルのミューテーションのフィールドは直列に実行されます。

普通の引数ではなく入力型を使うのはなぜですか?

入力オブジェクトは、関連する値を1つの型付き引数にまとめます。そのため、ミューテーションのシグネチャが短く保たれ、後から省略可能なフィールドを追加しても、すべての呼び出し側を変更する必要がありません。

ミューテーションをGETリクエストで送れますか?

いいえ。GraphQL over HTTPのガイドラインでは、サーバーがGETを受け付けてよいのはクエリのオペレーションだけです。ミューテーションはPOSTで送ります。これにより、書き込みがブラウザーやCDNのキャッシュに入ることも防げます。

複数のフィールドを持つミューテーションはアトミックですか?

いいえ。graphql.orgでも、直列実行はデータベースのトランザクションではないと説明されています。2つ目のフィールドが失敗しても1つ目の変更は残り、レスポンスには一方のデータともう一方のエラーが含まれます。

削除のミューテーションは何を返すべきですか?

仕様では決められていませんが、フィールドには出力の型が必要です。よく使われるのは、削除したオブジェクトのID、削除したオブジェクトそのもの、またはIDと成功フラグを持つペイロード型です。

ミューテーションの構造

変数と入力オブジェクト

書き込みで起きるエラー

例で使っているスキーマ

Mutation型と入力型

入力型にはinputキーワードを使います。TaskPatchには必須のフィールドがないので、更新では変わった部分だけを送れます。

JavaScriptから送る

fetchでミューテーションをPOSTする

ドキュメントと変数は、1つのJSON本文の2つのキーとして送られます。ステータスが200でもエラーを確認しましょう。

1つのオペレーションで2回書き込む

エイリアスを使うと、同じフィールドを2回実行できます。2つ目は1つ目が終わってから実行されますが、2つ目が失敗しても1つ目は取り消されません。

作成

入力型が新しいタスクのフィールドをまとめます。選択セットでは、サーバーが割り当てたIDを要求します。

更新

IDで変更するタスクを指定し、入力には変更するフィールドだけを入れます。

削除

削除したタスクには選択できるものが残らないので、このスキーマは削除したIDを単純なIDスカラーとして返します。

ミューテーションビルダー

ミューテーションを選ぶ

タスクのタイトル

ミューテーション

変数(JSON)

レスポンス例

ミューテーションをコピー

変数をコピー

削除にはIDだけが必要なので、タイトルは送信されません。

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る