現職でNext.jsを使って開発してるんですが、最初はSPAで作ってからBFF化させるという計画らしく、そもそもBFFって言葉しか知らなかったので、とりあえず概要だけまとめてみた。
そもそもBFFとは
Backend for Frontendの略
APIサーバがビジネスのドメインロジック部分を担当するのに対して、BFFはあくまでユーザーインタフェースをサポートするサーバである。なので、開発はフロントエンドエンジニアが行う。
フロントエンド開発において「複数のAPIをまとめる(下図参照)」「サーバサイドレンダリングを行う」などが求められる機会でBFFは有効。
従来の設計(フロントから直接APIを叩く)
Front-end ⇄ Back-end
BFFの設計(BFFがバックエンドをラップするとか、吸収するとかって言います)
Front-end ⇄ BFF ⇄ Back-end
BFFのメリット
パフォーマンスの改善。
クライアントから複数のAPIを叩くと大量のリクエストをすることになります。BFFでAPIをひとまとめにする事ができれば、クライアントからのリクエストは1回になるので簡単。
またクライアントで欲しい形でデータを返してくれるのでクライアント側でデータの操作がなくなるので、コードがシンプルになる。
BFFのデメリット
BFFも一つのマイクロサービスなので、 BFF自体の開発コストが当然かかってしまう。サーバーにデプロイしメンテナンスも必要。
採用する技術に何がある?
・Next.jsであれば標準のAPI Routing機能を使う(Front, BFFをまとめて開発できる)
・Nest.jsを使う
・AWS AppSyncを使う
など
ちなみに必ずしもGraphQLである必要はないみたいです。REST APIでもOK。
とりあえずは概要だけまとめました、これを機に実際にトライしてみようとおもいます。