GraphQL

クライアントが必要なデータだけを指定して取得できる API クエリ言語

APIフロントエンド
GraphQL」の技術書を見る (12 冊) →

GraphQL とは

GraphQL は、Facebook が 2015 年に公開した API クエリ言語で、クライアントが必要なデータだけを指定して取得できる。REST の Over-fetching (不要なデータの取得) と Under-fetching (複数リクエストが必要) を解決する。

REST vs GraphQL

REST と GraphQL の違いを以下にまとめる。

観点RESTGraphQL
エンドポイントリソースごとに複数単一エンドポイント
データ取得サーバーが決定クライアントが指定
Over-fetching発生する発生しない
Under-fetching複数リクエストが必要1 リクエストで取得
キャッシュHTTP キャッシュが容易工夫が必要

クエリの例

クエリの例を以下に示す。

# クライアントが必要なフィールドだけ指定
query {
  user(id: "123") {
    name
    email
    orders(limit: 5) {
      id
      total
      status
    }
  }
}
{
  "data": {
    "user": {
      "name": "Alice",
      "email": "alice@example.com",
      "orders": [
        { "id": "o1", "total": 1000, "status": "completed" }
      ]
    }
  }
}

スキーマ定義

スキーマ定義の例を示す。

type User {
  id: ID!
  name: String!
  email: String!
  orders(limit: Int): [Order!]!
}

type Order {
  id: ID!
  total: Int!
  status: String!
}

type Query {
  user(id: ID!): User
  orders(userId: ID!): [Order!]!
}

type Mutation {
  createOrder(input: CreateOrderInput!): Order!
}

AppSyncAWS のマネージド GraphQL サービスで、DynamoDBLambda、RDS をデータソースとして接続できる。

GraphQL の注意点

GraphQL の注意点を以下にまとめる。

注意点対策
N+1 問題DataLoader でバッチ化
複雑なクエリクエリの深さ・複雑さを制限
キャッシュApollo Client のキャッシュ
ファイルアップロードREST と併用

いつ GraphQL を使うか

いつ GraphQL を使うかの判断基準を以下にまとめる。

ケース推奨
モバイル + Web で異なるデータが必要✅ GraphQL
シンプルな CRUD API❌ REST で十分
リアルタイム更新✅ GraphQL Subscriptions
公開 API❌ REST の方が一般的

理論と実装の両面から学ぶなら関連書籍が参考になる。

この記事は役に立ちましたか?

関連用語

関連する記事