概要 †
- クエリ言語を記述することで、クライアント側が欲しいリソースとその形式を宣言できる
- 単一のエンドポイントおよびリクエストで複数のリソースを取得できる
- 型定義やクライアント実装の自動生成、クエリを試しに発行できるクライアントGUI機能、クエリ補完機能などといった開発体験の向上
オススメ資料 †
API設計 †
コードファースト or スキーマファースト †
マイクロサービス †
Svelte †
Apollo Client †
Relay †
Prisma †
Go †
gqlgen †
PHP †
Apollo Studio †
Hasura †
AWS †
フロントエンド †
Vue †
バックエンド †
セキュリティ †
リスク †
- データを大量に取得するクエリ
- 重い計算をさせるクエリ
- 大量にDBアクセスを発生させるクエリ
対策 †
ホワイトリストによる制限 †
- GraphQL API が受け付けるクエリ一覧をホワイトリストとして持っておいて、クライアントから送られてきたクエリがそれに一致する場合のみ実行するやり方
クエリのコスト制限 †
Introspection query †
Field suggestion †
スタックトレース †
事例 †
診断サービス †
コマンドラインツール †
curl †
curl -X POST -H "Content-Type: application/json" http://localhost:13020/graphql -d '{"query": "query { admins { id \n name \n } }"}'