GraphQLポイント
- Graph(グラフ構造の) + QL(クエリ言語)。Web APIの1つでREST APIの次のパラダイムとして注目されている
- GraphQL APIのエンドポイントは1つで、データ操作の種類(CRUD)と欲しいレスポンス形式を指定してリクエストし、データを取得することができる
- クライアント(フロントエンド)側からデータのレスポンス形式を指定できる
GraphQL用語
用語 | 意味 |
---|---|
Query | クエリ処理( = Get) |
Mutation | トランザクション処理( = Put/Post/Delete) |
Schema | APIの定義。クライアントがサーバーにクエリを送信し、返却値として期待されるオブジェクトの型を定義 |
Subscription | クライアントへの通知。( = WebSocketと同様の効果) |
仕組みのイメージ
REST API との比較
比較項目 | REST API | GraphQL |
---|---|---|
データ操作の種類 | GET/POST/PUT/DELETE | Query/Mutation |
エンドポイント | 複数([GET]user/[PUT]setting など欲しいデータによってリクエスト先エンドポイントが変わる) | 1つ(データ操作の種類と欲しいレスポンス形式を指定する) |
型付け | 弱い | 強い |
Pub/Sub | なし(WebSocketを使用することが多い) | 可(subscription) |
メリット
- クライアントからAPIのレスポンスの指定ができる
- サブスクリプションを利用したリアルタイム処理ができる
- クライアントはデータをサブスクライブすることで、イベントドリブンに処理を実装することが可能
デメリット
- N + 1 問題が発生する可能性
- クエリの指定方法によってはパフォーマンス問題や脆弱性を生みやすい。