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

request.graphql
query GetUserProfile {
user(id: "123") {
name
email
# 住所は要らないので書かない -> 転送量が減る!
posts(limit: 5) {
title
}
}
}