GraphQLの「Serving over HTTP」とは何か

サマリ

Serving over HTTP

https://graphql.org/learn/serving-over-http

GraphQL サーバは GET と POST の 2 種類の HTTP リクエストをハンドリングできるようにします。

マッピングされるパラメータは次のとおりです。

パラメータ意味必須
queryクエリそのもの必須
variablesクエリの変数任意
operationNameクエリの名前。複数のオペレーションを同時に実行する場合には必須任意

GET

GET リクエストでは、GraphQL Query が query というクエリパラメータにマッピングされます。

hero.graphql
query HeroQuery($id: ID!) {
hero(id: $id) {
name
}
}

このクエリは、次のようにエンコードされます。

Terminal window
http://myapi.com/graphql?query=query($id: ID!){hero($id: ID!){name}}&operationName=HeroQuery&variables={"id":"avagfads732"}

POST

POST リクエストでは、application/json でリクエストを送信する。次の形式の JSON をボディとして送信されます。

{
"query": "...",
"variables": "updateHeroName",
"operationName": { "id": "avagfads732", "name": "Andrew" }
}

レスポンス

レスポンスは JSON 形式で返される。GraphQL の仕様に則り、dataフィールドかerrorsフィールドが含まれます。

{
"data": {
"hero": {
"name": "Andrew"
}
}
}

{
"errors": [
{
"message": "Cannot query field 'hero' on type 'Query'",
"locations": [
{
"line": 2,
"column": 3
}
]
}
]
}

[Draft] Transport Specification / GraphQL over HTTP

ここまでの内容が GraphQL 公式で公開されている内容で、ここから先はまだドラフト段階です。

仕様の定義場所

https://graphql.github.io/graphql-over-http/draft/

概要