はじめに
業務でBFFを使用しているが、フロントエンドとバックエンドの間にいる奴ぐらいの知識しかないので調査してまとめる。
BFFとは
BFF(Backends For Frontends)とは、フロントエンドとバックエンドの中間に配置され双方の複雑な処理を緩和させる責務を持つアーキテクチャ設計バターン。
名前の通り、フロントエンドのためのバックエンド、バックエンドAPIから取得したデータをフロントエンドに向けて生成するサーバのこと
登場経緯
クライアント端末の増加したことに伴うロジックの増加です。
例えばweb、スマホ版web、スマホアプリ、デスクトップアプリなど複数のクライアント登場により、それぞれにコンテンツのだし分けを実装する必要があり、冗長なコードを書かざるを得ない。
そこで、複数のバックエンドから情報を取得し、適切な形に整形するロジックを持つサーバが導入された。それがBFFの登場経緯
メリット
APIの集約
クライアントはBFFに対してAPIを投げれば、複数のバックエンドに対しての対応や加工をBFFがやってくれる
バックエンドからのレスポンスをクライアントが求める形に加工してクライアントに返してくれるので処理が少ない
バックエンドの差異吸収
バックエンド毎に異なるAPI(rest,grpc...)を使用していても全て吸収し、いい感じに対応してくれる
フロントとバックの分離
フロントとバックが直接通信を行う場合、通信プロトコルを一致させないといけなかったが、BFFを挟めば、異なる通信プロトコルを使用できる
認証、権限、キャッシュの分離
BFFに認証、権限、キャッシュなどの処理を実装すれば、フロントとバックはそれらを気にしなくてよい
デメリット
BFFサーバの構築と運用保守が必要
BFFはソースコードを持ち動作するサーバなので構築から運用保守が必要
デプロイ
BFFはバックエンドと多くやり取りするため、バックエンドのAPIが変更になれば当然BFFも修正し同時にデプロイする必要がある
通信の増加
モノリシックよりも遥かに通信量が増えるので、データ取得までの時間がかかる。帯域の増強などが必要
まとめ
構築難しそうだなと感じたが、メリットが大きすぎるのでマイクロサービスでは必須に感じた。
調査していて、APIについての知識が不足していると感じたので次はAPIについて調査しようと思う。