【要約】GraphQLとBFFは、Best Friend Forever らしい。なんで?よく分からんから調べてみた。 [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
フロントエンド開発チームは、RESTベースのBFF運用において以下の課題に直面する。
- ・画面の追加に伴い、専用のエンドポイントが際限なく増殖する。
- ・エンドポイントごとに異なる整形ロジックが散在し、保守性が低下する。
- ・データの取得において、過不足(アンダーフェッチ/オーバーフェッチ)が生じやすい。
// Approach
設計者が、BFFの集約・整形機能をGraphQLに置き換えることで、管理の複雑さを解消する。
- ・単一のエンドポイント(/graphql)に全てのクエリを集約する。
- ・スキーマを定義し、データの型と契約を明文化する。
- ・クライアントがクエリを記述し、必要なデータ構造を宣言的に指定する。
- ・サーバー側ではResolverを用いて、内部APIからのデータ取得を実装する。
// Result
開発チームが、GraphQLをBFFとして適切に配置することで、以下の恩恵を得る。
- ・スキーマ管理により、エンドポイントの増殖問題を解決できる。
- ・Persisted Queriesの導入により、クエリDoSのリスクを封じ込める。
- ・DataLoader等の活用により、N+1問題に対処しつつ効率的な取得を実現する。
- ・BFFの役割である「集約と整形」を、言語仕様レベルで最適化できる。
Senior Engineer Insight
> GraphQLの弱点は、不特定多数に公開するパブリックAPIにおいて顕著になる。しかし、BFFという限定された環境では、これらのリスクは制御可能なコストに変わる。技術性能だけでなく、配置によるトレードオフの変化を理解することが、実戦的な選定には不可欠である。