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

GraphQL Federation とは?

最終更新:
💡 APIの担当は分けても、利用する窓口はひとつに

分担して作る複数のAPIを、クライアントに1つのGraphQL APIとして公開する仕組み。Apollo Federationではサブグラフのスキーマを構成し、ルーターが必要な問い合わせと結果の統合を行う。

📌 このページのポイント
Federation:窓口ひとつ、担当は分担クライアント:ひとつのGraphQL APIルーター問い合わせを分配し、結果を統合商品サブグラフProduct:名前・価格レビューサブグラフProduct:評価同じ商品は、識別用のキーで結びつける
Apollo Federationの問い合わせ例。矢印は問い合わせ方向です。サブグラフのスキーマから統合用スキーマを構成し、結果はルーターがまとめます。
ひよこ ひよこ
普通のGraphQLとは、別物?
ペンギン先生 ペンギン先生
GraphQLはAPIへの問い合わせや型などの仕組みで、Federationは複数の担当のAPIを統合する構成の一つだよ。GraphQLを使うなら必ず一台のサーバーや一つの大きなファイルにまとめる、という決まりはないんだ。
ひよこ ひよこ
どうやって一つにするの?
ペンギン先生 ペンギン先生
Apollo Federationの例では、各チームのサブグラフのスキーマから、統合用のスキーマを構成するよ。クライアントはルーターに問い合わせ、ルーターが必要なサブグラフを呼び出して結果をまとめる。スキーマを組み合わせる段階と、実際の問い合わせを処理する段階を分けて考えよう。
ひよこ ひよこ
別サービスのデータは、つなげられる?
ペンギン先生 ペンギン先生
たとえば商品サービスが名前と価格、レビューサービスが評価を担当する場合だね。両方がProductの識別用フィールドupcを@keyで定めると、同じ商品について別のフィールドを扱える。識別子を書くだけで完成するわけではなく、実際にその商品を解決する処理も必要だよ。
ひよこ ひよこ
窓口が一つなら、速くなる?
ペンギン先生 ペンギン先生
通信回数をクライアント側で減らせる場合はあるけれど、必ず速くなるわけではないよ。裏側で複数のサービスを順番に呼ぶ処理や、繰り返し取得が増える場合もある。問い合わせの計画と各サービスの処理を見て、実際の待ち時間を測ろう。
ひよこ ひよこ
どんなときに導入するの?
ペンギン先生 ペンギン先生
APIを複数チームで分担しながら、一貫した使い方を提供したい場合に検討できるよ。一方でスキーマ変更の整合性、権限の扱い、障害や性能の監視をチーム間で決める必要がある。小さなAPIなら、運用の複雑さに見合うかも考えよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「GraphQL Federation」って出てきたら「分担したAPIを、一つのGraphQLの窓口で使えるようにする仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「GraphQL Federation」 = GraphQL APIの連合
💬 担当ごとに分けたAPIを、利用する側には一つの仕組みとして見せるイメージだよ。

参考資料

← 用語集にもどる