GraphQLとは

GraphQLはFacebookが開発したAPIのクエリ言語です。クライアントが「欲しいデータの形」を宣言的に指定することで、RESTとは異なるアプローチでデータを取得します。

RESTとGraphQLの比較

項目 REST GraphQL
エンドポイント リソースごとに複数 通常は1つ
取得データの制御 サーバー側が決定 クライアント側が指定
オーバーフェッチ 不要なデータも取得 必要なフィールドのみ
アンダーフェッチ 複数回リクエスト 1回で解決
型システム なし(OpenAPI等で補完) スキーマで厳密に定義

GraphQLクエリの基本

query {
  user(id: "1") {
    name
    email
    posts {
      title
      createdAt
    }
  }
}

このクエリ1回でユーザー情報と投稿一覧を取得できます。RESTなら/users/1/users/1/postsの2回リクエストが必要です。

Mutationとサブスクリプション

Mutation:データの作成・更新・削除操作を行います(RESFのPOST/PUT/DELETEに相当)。

Subscription:WebSocketを使ったリアルタイムデータ配信。チャットやライブ更新に最適です。

GraphQLが向いているシーン

  • モバイルアプリ(通信量の削減が重要)
  • 複数のフロントエンド(Web・iOS・Android)が同一APIを使う場合
  • フィールドが多いデータモデルで柔軟な取得が必要な場合
  • マイクロサービスを統合するBFF(Backend for Frontend)層

主要ライブラリ

  • Apollo Server(Node.js)、Strawberry(Python):サーバー実装
  • Apollo Clienturql:クライアント実装