Backend for Frontend (BFF) パターンは、異なるクライアント(例えば、モバイルアプリケーション、Webアプリケーション、IoTデバイス)に異なるAPIまたはインターフェースを提供する必要がある場合に適用され、バックエンドとの相互作用を最適化し、マイクロサービスの内部の複雑さを隠すために使用されます。各クライアントタイプには、そのニーズに最適な専用APIを実装するBFFサーバーが与えられます。
大規模システムでの作業が便利です — 異なるBFFは以下を可能にします:
Node.jsでのアーキテクチャの例:
// BFFのためのExpress const express = require('express'); const axios = require('axios'); const app = express(); app.get('/profile', async (req, res) => { // 異なるサービスからデータを集約 const [user, settings] = await Promise.all([ axios.get('http://user-service/api/user'), axios.get('http://settings-service/api/settings') ]); res.json({ name: user.data.name, theme: settings.data.theme }); }); app.listen(3000);
主な特徴:
BFFは単なるクライアントとマイクロサービス間のプロキシですか?
いいえ。BFFと通常のプロキシの主な違いは、ビジネスロジックとデータの適応が存在することです。BFFはデータを転送し集約するので、リクエストを単に転送するだけではありません。
すべてのクライアントに1つのBFFを使用できますか?
いいえ、BFFの原則の1つは、クライアントのタイプごとにBFFを分けることです。単一のBFFを使用すると、異なるインターフェースやデバイスタイプに最適に調整する意味が失われます。
BFFはチーム間の弱い結合を増加させますか?
多くの場合「はい」と答えますが、それは違います:BFFのサポートはフロントエンドとバックエンドのチームの共同作業を必要とし、変更の調整が必要なため、結合が強化されることが多いです。