BFF(Backends For Frontend)
Overview
これはめちゃくちゃ参考になる
参考URL
Next.js BFFとかExpress記事
Next.js BFF for Proxy + SSR
フロントエンドのためのバックエンド。フロントエンドのためにAPIをコールしたり、HTMLを生成したりするサーバのことを指す。
上記だと、今までのWebアプリケーションサーバとの違いは本質的にはそこまで変わらないが、フロントエンド専用という役割が異なる。
専門領域に特化させることで集中できるようにするアーキテクチャ設計のことをBFFとよぶ
Webアプリケーションサーバの役割
- データベースや全文検索エンジンといったミドルウェアからデータを取得、更新する
- ページを構築する
- HTTPのインターフェースとしてユーザからの入力情報を得る ここで、データベースや全文検索エンジンからデータを取得、更新する部分はデータの整合性や信頼性を担保しつつ管理することを目的とします。ページを構築する箇所やユーザーからの入力情報を得る箇所はユーザーインターフェース(UI)に該当し、ユーザー体験(UX)を向上させることを目的としています。
BFFの 構成
BFFはリバースプロキシとバックエンドのAPIサーバの間に設置する構成をとることが多い。
リバースプロキシは静的アセットファイルの圧縮。キャッシュといったWebアプリケーションサーバの肩代わりをするためのサーバ。
バックエンドのAPIサーバは主にデータベースや全文検索エンジンといったミドルウェアと連携してリソースを操作したりデータを管理したりする役割として振る舞う。
BFFはこの2つのサーバ間でページを構築したり、ユーザからの入力情報を受け付けてバックエンドに流したりといったUI/UXに関わる機能を担当する。
BFFが必要な技術的背景、歴史的経緯
なぜBFFが必要なのかを知るためにはアプリケーションの内部構造が時代とともに変化し続けているという背景
- リバースプロキシとは リクエストの流れはプロキシと同様で、クライアント → リバースプロキシ → Webサーバのように伝わる。 リバースプロキシではクライアントはWebサーバの存在を知らないという大きな違いがある。そのためBackendのURLが知られない。
BFFのメリット
BFF(Backends For Frontend)パターンは、特定のフロントエンドアプリケーション(ウェブ、モバイルなど)用にカスタマイズされたバックエンドサービスを提供するアーキテクチャスタイルです。このアプローチにはいくつかの明確なメリットがあります
-
フロントエンドに最適化されたAPI BFFを使用すると、特定のフロントエンドアプリケーションのニーズに合わせてAPIを最適化できる。
これにより、フロントエンドが必要とする正確なデータ形式を提供することが可能になり、余分なデータフェッチや不必要なデータ処理を避けることができる。 -
パフォーマンスの向上 フロントエンド特有のニーズに合わせてAPIが最適化されるため、ネットワークリクエストの回数を減らし、データサイズを小さくすることが可能。
これにより、アプリケーションのロード時間が短縮され、ユーザーエクスペリエンスが向上します。 -
セキュリティの強化 BFFを介してフロントエンドとバックエンドの通信を行うことで、バックエンドサービスのエンドポイントを直接公開しなくて済む。
これにより、APIキーやバックエンドのURLが外部に露出するリスクを減らし、セキュリティを強化できます。 -
複雑なビジネスロジックの隠蔽 BFFは、複数のバックエンドサービスからデータを取得し、フロントエンドが必要とする形式に変換する役割を担う。
これにより、フロントエンド開発者は複雑なビジ ネスロジックやバックエンドサービスの統合の詳細を気にすることなく、UIの実装に集中できます。 -
フロントエンドの開発速度の向上 BFFを使用すると、フロントエンド開発チームは自身のニーズに合わせてバックエンドAPIを調整できるため、開発プロセスが迅速化される。
また、フロントエンドとバックエンドの開発が疎結合になるため、互いの開発に影響を与えることなく、独立して作業を進めることができます。 -
異なるフロントエンド向けのカスタマイズ ウェブ、モバイル、デスクトップなど、異なるプラットフォーム向けに特化したBFFを用意することで、それぞれのプラットフォーム特有の最適化や機能提供が可能になります。
BFFパターンは、フロントエンドのニーズに合わせてバックエンドサービスをカスタマイズし、効率的かつセキュアなアプリケーション開発を実現するための有効なアプローチです。