GraphQLリクエストのContent-Type
GraphQL APIリクエストに正しいContent-Typeヘッダーを設定します。application/jsonがGraphQL over HTTPの標準である理由を解説します。
JSON APIs
詳細な説明
GraphQL Over HTTP
GraphQLリクエストは通常、HTTP POSTでJSONペイロードとして送信されます。標準的なContent-Typeは、通常のJSON APIと同じapplication/json; charset=utf-8です。
ヘッダー値
Content-Type: application/json; charset=utf-8
リクエストボディの構造
GraphQLリクエストボディはquery、オプションのvariables、オプションのoperationNameフィールドを持つJSONオブジェクトです:
{
"query": "query GetUser($id: ID!) { user(id: $id) { name email } }",
"variables": { "id": "123" },
"operationName": "GetUser"
}
なぜカスタムMIMEタイプを使わないのか?
application/graphql+jsonというメディアタイプが提案されていますが(GraphQL over HTTP仕様ドラフトの一部)、大多数のGraphQLサーバーとクライアントはプレーンなapplication/jsonを使用しています。異なるContent-Typeを使用すると、サーバーがリクエストを拒否する可能性があります。
代替:application/graphql
一部の古いGraphQLサーバーはapplication/graphqlを受け入れ、ボディが生のクエリ文字列(JSONでラップされていない)になります。これは非標準であり、新しい実装には推奨されません。
curlの例
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"query":"{ users { id name } }"}' \
https://api.example.com/graphql
ユースケース
Apollo Client、Relay、または直接HTTPコールを使用してGraphQL APIと統合する際に使用します。すべての主要なGraphQLサーバー実装で動作します。