複数サービスのGraphQLスキーマをゲートウェイで統合し、一つの要求を各サービスへ振り分ける構成図

複数チームが別々のGraphQL APIを運用していても、クライアントが各エンドポイントと応答を直接つなぐ必要はありません。ゲートウェイの背後でデータを結び、一つのグラフとして公開できます。よく比較される方法がスキーマ・スティッチングとApollo Federationです。どちらも複数APIを統合して見せる目的がありますが、名称だけで性能や運用の優劣は決まりません。使うツール、スキーマの所有者、要求の計画、デプロイ責任を比べます。

まず各方式の境界を確認する

The Guildの現行@graphql-tools/stitch文書は、複数のGraphQLサービスから一つのゲートウェイ・プロキシスキーマを作り、要求の一部を適切なサブスキーマへ委譲すると説明します。スキーマ拡張、プログラムによる型マージ、ディレクティブによる型マージが選択肢です。既存スキーマの接続方法や名前・型の衝突への対処で設計が変わります。

Apolloの現行Federation文書は、複数APIを一つの連合GraphQL APIに宣言的にまとめるApollo製品の構成を説明します。クライアントはルーターへ要求し、ルーターが下位APIを調整します。統合グラフをsupergraph、構成APIをsubgraphと呼びます。これらの用語やディレクティブはApollo Federationの設計に属し、GraphQL標準がすべてのサーバーに採用を義務づけているわけではありません。

変更と合成を誰が担うか

スティッチングでは、ゲートウェイのコードがサブスキーマを読み込み、接続する役割を担うことがあります。スキーマ拡張で関係を追加するか、型マージで共有エンティティを結ぶか、委譲規則をどこでテストするかを決めます。境界やデータ所有者が曖昧だと、統合ロジックがゲートウェイに集まったり、リモートスキーマの変更がデプロイ直前まで分からなかったりします。ツールだけで解決する問題ではありません。

Federationでは各チームのsubgraphがsupergraphに寄与し、合成規則とルーターが境界を反映します。Apollo文書は、チームごとにAPIを開発しながらクライアントに単一の入口を提供するモデルを説明します。ただしチームの独立性が自動で保証されるわけではありません。共有エンティティのフィールド所有、互換性検査、合成失敗の責任、ルーター運用を組織で定める必要があります。

機能表より先に試す項目

いまの課題を具体化します。複数のリモートスキーマを早くまとめたいのか、各チームの変更を共通グラフとの互換性まで管理したいのかで試験項目は変わります。二つのサービスにまたがる代表的な要求を選び、委譲やルーティング、部分障害、エラー伝播、遅延、認証境界、スキーマ変更の流れを記録します。検討対象の現行リリースと互換サーバーも確認してください。

同じデータとクエリを使い、キャッシュ・ネットワーク・下位サービスの時間を分けて測ります。複数サービスへのfan-outによる費用や失敗の形はデプロイとクエリに左右されます。文書の機能一覧だけでは本番性能を予測できません。合成時間、開発者の作業、可観測性、障害対応を合わせて評価します。

運用上の判断を記録できる問いにする

選定前に、各チームのスキーマ変更者、合成エラーの解決担当、下位サービス障害時のクライアント応答を合意します。同じテスト要求と障害シナリオを両方式で実行し、変更提案からデプロイまでの流れも比べます。導入コストにはゲートウェイ運用だけでなく、各チームの学習、監視、バージョン更新も含まれます。統合グラフが減らす複雑さと、新たに生む運用境界の両方を記録してください。

専門家の視点:文書のバージョンと運用責任を固定する

The Guild文書はGraphQL Tools v7以降、スティッチングがFederationとかなり比較可能になったと記しています。これは同ライブラリ文書のバージョン付き説明であり、すべての実装が同等だという保証ではありません。Apollo文書もApolloのルーター・supergraph・subgraphモデルを説明します。実務では名称より、使用バージョン、合成規則、所有境界、失敗時の動作を明記した再現可能な試験結果を判断材料にします。

出典