REST vs GraphQL
Facebook (Meta) がモバイルアプリの通信削減のために発明した技術。
Query
データの取得(Read)。欲しいフィールドだけを指定できるのが最大の特徴。
Over-fetching
RESTの弱点。「ユーザー名だけ欲しいのに、住所や電話番号まで全部返ってくる」問題。
The Problem with REST
REST API
GET /users/123
- ❌ Over-fetching: JSONが大きい。使わないデータも返ってくる。
- ❌ Under-fetching: 「ユーザーの投稿」も欲しいなら、さらに <code>GET /users/123/posts</code> を叩く必要がある(N+1問題の温床)。
GraphQL
POST /graphql
- ✅ Exact-fetching: 欲しいデータ構造をクライアントが指定する。サーバーはそれに合わせてJSONを整形して返す。
- ✅ One Round-trip: ユーザーも投稿も、1回のリクエストでまとめて取れる。
The Query
query GetUserProfile { user(id: "123") { name email # 住所は要らないので書かない -> 転送量が減る! posts(limit: 5) { title } }}