Open2

BFFとは

ふじしろふじしろ

BFFとは?背景から

https://qiita.com/souhei-etou/items/d5de99bb8cba1c59d393
https://samnewman.io/patterns/architectural/bff/
https://zenn.dev/morinokami/scraps/20a4eab9415a50
https://aws.amazon.com/jp/blogs/news/backends-for-frontends-pattern/

GPTに聞いてみる

Q: web apiの文脈でBFFとはなんですか?

A: アプリ  [16分前](https://team-lab.slack.com/archives/C05EHU9BZPB/p1693904448446979?thread_ts=1693904395.649869&cid=C05EHU9BZPB)
BFF(Backend For Frontend)は、Web APIの文脈において、フロントエンドとバックエンドの間に配置されるサーバーサイドのコンポーネントで、特定のユーザーインターフェイスに対して最適化されたAPIを提供します。BFFは、クライアントアプリケーションに情報を提供するために、複数のバックエンドサービスと通信する役割を担います。
BFFの主な目的は、クライアント側の要求を簡略化し、効率的なデータ取得を可能にすることです。一般的に、BFFは以下の機能を持ちます:
1. バックエンドサービスからのデータ取得および集約
2. バックエンドとフロントエンドの通信の中継
3. データ変換とシリアライズ
4. 必要に応じてデータフィルタリングや加工
BFFは、特定のフロントエンドアプリケーション(例えばWeb、モバイル、デスクトップ)に応じて個別に開発されることが一般的です。これにより、各クライアントアプリケーションが必要とするデータ形式や構造をより効率的に提供できるようになります。

Q: 上記で示されたBFFの各機能について、第2階層まで出力

A: 1. バックエンドサービスからのデータ取得および集約
1.1. 複数のバックエンドサービスやデータストアから必要なデータをリクエスト
1.2. 取得したデータを統合・マージし、クライアントが期待する形式に合わせる
1.3. このプロセスにより、単一のリクエストとしてフロントエンドに提供できるようになる
2. バックエンドとフロントエンドの通信の中継
2.1. クライアントからのリクエストを適切なバックエンドサービスにルーティング
2.2. クライアントとバックエンドサービス間のプロトコルや認証情報の変換
2.3. クライアント側とバックエンド側のセキュリティ要件を満たす
3. データ変換とシリアライズ
3.1. バックエンドから受け取ったデータ形式を、フロントエンドが扱いやすい形式(JSONなど)に変換
3.2. 必要に応じて、データの構造やフィールド名を変更することも可能
3.3. この変換は、フロントエンドでのデータ処理の負担を軽減し、効率的なやり取りを支援
4. 必要に応じてデータフィルタリングや加工
4.1. クライアントアプリケーションが使用するため、現行データから不要な情報を削除
4.2. データのマスキングやセキュリティ対策の目的で、一部データの改変や隠蔽を行う場合もある
4.3. データセットの並べ替え、フィルタリング、ページネーション等、クライアント側の表示に適した状態にして提供

Q: あるバックエンドサービスへのリクエスト項目が、フロントエンドで定義しているフォームの項目と異なる場合、クライアントからのリクエストをバックエンドサービスへのリクエストに使うために加工するのはBFFの役割ですか?

A: はい、その通りです。BFF(Backend For Frontend)の役割の1つに、クライアントからのリクエストをバックエンドサービスへ適切に伝えるためのデータ加工が含まれます。これには、フロントエンドのフォーム項目とバックエンドサービスのリクエスト項目のマップや、必要に応じてデータの変換や再構成を行うことが含まれます。
BFFは、バックエンドサービスへのリクエストの形式や構造を理解し、クライアントから受け取ったデータをそれに応じて加工することで、クライアントとバックエンドサービスの間に適切な情報のやり取りを可能にします。これによりフロントエンドの処理が簡略化され、バックエンドサービスとの連携が効率的に行われます。

Q: BFFの提唱者を教えてください

A: BFF(Backend For Frontend)の概念は、サム・ニューマン(Sam Newman)によって提唱されました。彼は、マイクロサービスやSOA(Service Oriented Architecture)の分野で広く認知されているエンジニアであり、著書「Building Microservices」でもこの概念について解説しています。サム・ニューマンは、BFFを導入することで、フロントエンドとバックエンドのコミュニケーションを効率化し、マイクロサービス環境での各クライアント側アプリケーション(Web、モバイル、デスクトップなど)に対応したAPIを提供できると述べています。