プロダクト開発の組織構造
Product Owner
iOS
Engineer
Android
Engineer
Server
Engineer
Designer,
QA, Director
Product Owner
Server
Engineer
Backlog Backlog
Agile
Development
BFFとは
“One backend per user experience”
1つのユーザー体験に密結合なバックエンド
引用: https://samnewman.io/patterns/architectural/bff/
Slide 28
Slide 28 text
BFFとは
BFF
(Desktop)
BFF
(Mobile)
Service
A
Service
B
Service
C
• クライアントとバックエンド
サービスの間に挟まるAPI層
• クライアントは直接バックエ
ンドサービスを叩かずにBFFを
叩く
• BFFはクライアントの要件に合
わせて最適化される
※本セッションではBFFは主にAPI Gateway的
なアーキテクチャのものを中心に話します
Slide 29
Slide 29 text
BFFとは
BFF
(Desktop)
BFF
(Mobile)
Service
A
Service
B
Service
C
BFFが各バックエ
ンドサービスと
通信
クライアント
サイドが管理
バックエンドが
管理
クライアントは
BFFと通信
BFFの目的 (2):集約・変換
• 様々なバックエンドサービス
と通信してデータ集約
• さらにそれらのデータをクラ
イアントに適した形に変換
• クライアントはBFFとだけ通信
すれば集約済みのデータ群が
返ってくるので扱いやすくな
る
• Microserviceを多く使うケース
で最適
BFF
(Mobile)
Service
A
Service
B
Service
C
技術選定:環境 (2)
(ANY)
HTTP method
API endpoint
/{proxy+}
Application
• GET /print
• GET /hoge
• etc…
• API GatewayはANYで全てのリクエストを受け、Lambdaは1つのExpressア
プリケーションで複数エンドポイントをハンドリングするように
• API Gateway + Lambdaが増えると管理運用が大変になるため、このパター
ンを採用
Slide 38
Slide 38 text
技術選定:環境 (2)
(ANY)
HTTP method
API endpoint
/{proxy+}
Application
• GET /print
• GET /hoge
• etc…
• 本来はあまり綺麗ではない設計かもしれないが、生産性・管理
しやすさ・今後増えるであろうエンドポイント数の規模を考え
ても妥当と判断
Slide 39
Slide 39 text
全体構成
iOS
Android
BFF API
Backend API
EC2 (ASG) ELB Lambda API Gateway
Slide 40
Slide 40 text
認可・認証
BFF API
Backend API
• API Gateway の API keyとともにBackend API用のトークンもリク
エストで渡している
• つまり現状この構成はBackend APIに密結合な設計である
• 現状弊社にはほとんどMicroserviceがないのでこれで足りている
が、今後BFFから他Microserviceをコールする際には認証の見直
しが必要
API Key
Token