TL;DR

Trusted Document を実現する方式の 1 つ。クライアントが使うクエリを事前に GraphQL サーバへ登録し、登録されたクエリだけの実行を許可する。

仕組み

  1. GraphQL Code Generator などのツールで、クライアントアプリが使うクエリを集める。それぞれのハッシュ値を計算し、元のクエリと一緒にサーバへ保存する
  2. クライアントは、クエリの代わりにハッシュ値を使ってリクエストする
  3. サーバは、ハッシュ値に対応するクエリを探して実行する。見つからなければ、想定していないクエリとしてエラーを返す
{
  "operationName": "GetUser",
  "variables": {},
  "extensions": {
    "persistedQuery": {
      "version": 1,
      "sha256Hash": "xxxxxxxxxx"
    }
  }
}

注意点

クエリを事前にサーバへ登録する手間がかかる。Signed Query は、登録の代わりに HMAC でクエリを検証することで、この手間をなくしている。

関連

出典