REST vs GraphQL
GraphQLはAPIのクエリ言語で、「欲しいデータの形を自分で指定できる」のが最大の違い!
【REST】
Client Server
| GET /users/1 |
|----------------->|
| { id, name, | ← 要らないフィールドも全部来る
| email, age, | (Over-fetching)
| address... } |
|<-----------------|
| GET /users/1/posts | ← 関連データは別リクエスト
|--------------------->| (Under-fetching → N+1問題)
|<---------------------|
【GraphQL】
Client Server
| query { |
| user(id: 1) { | ← 欲しいフィールドだけ指定
| name |
| posts { title }| ← 関連データも1発
| } |
| } |
|-------------------->|
| { user: { | ← ピッタリのデータだけ返ってくる
| name: "...", |
| posts: [...] }} |
|<--------------------|
比較表
| REST | GraphQL | |
|---|---|---|
| エンドポイント | リソースごとに複数 | /graphql 1本 |
| データ取得 | サーバー側が決める | クライアントが指定 |
| 過剰取得 | 起きやすい | 起きない |
| 複数リソース | 複数リクエスト必要 | 1リクエストでOK |
| 学習コスト | 低い | 高め |
| キャッシュ | HTTP標準で楽 | 工夫が必要 |
| 型システム | なし(OpenAPIで補完) | スキーマで強力に定義 |
操作の種類
Query → データ取得 (GETに相当)
Mutation → 作成・更新・削除 (POST/PUT/DELETEに相当)
Subscription → リアルタイム更新 (WebSocket的なやつ)
結局どっちを使えばいい?
GraphQL向き REST向き
───────────────── ─────────────────
・フロントが複数種類 ・シンプルなCRUD
(Web/App/etc) ・公開API
・データ構造が複雑 ・キャッシュ重視
・フロント主導開発 ・チームがREST慣れてる