TL;DR
Trusted Document を実現する方式の 1 つ。クライアントが使うクエリを事前に GraphQL サーバへ登録し、登録されたクエリだけの実行を許可する。
仕組み
- GraphQL Code Generator などのツールで、クライアントアプリが使うクエリを集める。それぞれのハッシュ値を計算し、元のクエリと一緒にサーバへ保存する
- クライアントは、クエリの代わりにハッシュ値を使ってリクエストする
- サーバは、ハッシュ値に対応するクエリを探して実行する。見つからなければ、想定していないクエリとしてエラーを返す
{
"operationName": "GetUser",
"variables": {},
"extensions": {
"persistedQuery": {
"version": 1,
"sha256Hash": "xxxxxxxxxx"
}
}
}注意点
クエリを事前にサーバへ登録する手間がかかる。Signed Query は、登録の代わりに HMAC でクエリを検証することで、この手間をなくしている。