更新: 2021-07-26
/ 作成: 2021-07-26 ドキュメント (document) GraphQL リクエストで送る全体の文字列のこと。
HTTP Get リクエストで指定する場合は、query
というクエリパラメーターで指定します(これは紛らわしいので、本当は document
という名前になっているべきでした)。
HTTP Post リクエストで指定する場合は、ペイロードの JSON 内の query
プロパティで指定します。
複数の GraphQL Operation(操作)や Fragment(フラグメント)を含むことができます。 クエリ (query) ドキュメント全体のことを示す場合と、query {...}
という個々のクエリ操作を示す場合があります。後者の場合は、データの取得要求を表しています。 操作タイプ (operation type, root type) query {...}
などの query
というキーワード部分のこと。操作の種類を表しており、query
の他には mutation
と subscription
があります。操作名 (operation name) query GetHoge {...}
などの GetHoge
の部分のこと。特に query 操作の場合は query name 、mutation 操作の場合は mutation name と呼ぶことがあります。操作名の指定は multi-operation documents じゃない限りオプショナルですが、ログ解析やデバッグをしやすくするために、名前を付けることが推奨されています。
HTTP Get リクエストで指定する場合は、operationName
というクエリパラメーターで指定します。
HTTP Post リクエストで指定する場合は、ペイロードの JSON 内の operationName
プロパティで指定します。マルチ操作ドキュメント (multi-operation documents) 複数の query や mutation リクエストを含むドキュメント。どの操作を実行するかは、操作名 (operation name) で指定します。 変数 (variables) query
や mutation
などの各操作に与えることのできる、キー&バリューの形で定義する値。query GetUser($id: ID!) {...}
などの ($id: ID!)
の部分で変数の名前と型を定義し、実際に渡す変数値は {"id": "maku"}
のような JSON 形式のキー&バリューで定義します。
HTTP Get リクエストで変数値を指定する場合は、variable
というクエリパラメーターで指定します。
HTTP Post リクエストで変数値を指定する場合は、ペイロードの JSON 内の variables
プロパティで指定します。フィールド引数 (field arguments) book(id: "xyz") {...}
など、フィールド参照時に指定する id: "xyz"
の部分のこと。クエリに変数が渡されている場合は、ここで book(id: $bookId)
のような感じで参照できます。選択セット、セレクションセット (selection sets) query GetHoge {...}
などの {...}
の部分のこと。どのフィールドを取得したいかを選択するので、選択セットと呼びます。フィールド (field) GraphQL オブジェクトの各プロパティ部分のこと。例えば、book { id title }
というクエリで Book オブジェクトを取得するときの id
とか title
の部分。大きく分けて 2 種類あり、Scalar types(末端ノードそれ自体が値)と、Object types(ネストされたフィールドから構成される)があります。 入力オブジェクト型 (input object type, input types) 引数専用のオブジェクト型のこと。文字列 (String) や数値 (Int) などのスカラー値と比べて、複雑なデータを渡せます。例えば、新規データの作成要求 (mutation) を行うときに、新規データの内容を表現するために使われます。定義方法自体は普通のオブジェクト型 (type
) と同様ですが、入力型 (input
) はそれ自身のデータを取得する用途には使えないところが異なります(つまり、クエリ内のフィールドとしては指定できないということです)。 GraphQL over HTTP GraphQL の仕様 (Spec) はクエリやスキーマの扱い方などを定義したものですが、現実的に GraphQL API は HTTP 経由で提供することが多いので、GraphQL over HTTP という仕様が別途定義されています。関連記事