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サーバー実装で動作します。

試してみる — Content-Type Header Builder

フルツールを開く