【ぐらふきゅーえるふぇでれーしょん】

GraphQL Federation とは?

💡 バラバラのGraphQLサービスを一つの大きな窓口にまとめる、API界の合体技
📌 このページのポイント
GraphQL Federation の構成 クライアント 1つのクエリ Federation ゲートウェイ スキーマ統合 + クエリプランニング ユーザーサービス User { id, name } @key(fields: "id") 注文サービス Order { id, items } User.orders を拡張 商品サービス Product { id, price } @key(fields: "id") 各サービスが独立してスキーマを管理 → ゲートウェイが統合
GraphQL Federationによるスキーマ統合のイメージ
ひよこ ひよこ

普通のGraphQLと何が違うの?

ペンギン先生 ペンギン先生

普通のGraphQLは1つのサーバーに全スキーマを書くんだけど、サービスが大きくなるとファイルが巨大になって大変なんだ。Federationは各チームが自分の分だけ管理できるよ

ひよこ ひよこ

具体的にはどういう仕組み?

ペンギン先生 ペンギン先生

例えば「ユーザーサービス」がUser型を定義して、「注文サービス」がUser型にordersフィールドを追加する。ゲートウェイが両方を合体させて、クライアントには1つのスキーマに見えるんだ

ひよこ ひよこ

でも複数サービスに問い合わせるなら遅くならない?

ペンギン先生 ペンギン先生

ゲートウェイがクエリプランニングで最適化するよ。必要なサービスだけに問い合わせて、結果をマージする。ただしN+1問題には注意が必要で、DataLoaderパターンとの併用が大事だね

ひよこ ひよこ

REST APIマイクロサービスとどっちがいいの?

ペンギン先生 ペンギン先生

クライアントが柔軟にデータを取得したいならFederationが有利だよ。ただし学習コストは高いから、チーム全体のGraphQL習熟度と相談して決めるのがいいね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
GraphQL Federation」って出てきたら「複数のGraphQLサービスを1つにまとめる仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「GraphQL Federation」 = グラフQL連合
💬 「Federation」は「連合・連邦」という意味。独立した国が連邦を組むように、独立したGraphQLサービスが一つのAPIを形成するんだよ
← 用語集にもどる