1. 背景
在传统的后端架构中:
- 所有客户端(Web、移动端、IoT)统一调用同一个后端 API。
但是:
- Web 需要的数据量大(更多展示字段、表格数据)。
- 移动端需要的数据量小(节省带宽、减少耗电)。
- 不同终端交互逻辑不同,统一 API 很难兼顾所有需求。
结果:
- 前端需要拼装/裁剪数据,增加复杂度。
- 后端接口越来越臃肿,逻辑变得难以维护。
👉 为了解决这些问题,出现了 BFF 模式(Backend For Frontend) 。
2. 什么是 BFF?
BFF 的核心思想:
👉 每种客户端有一个专属后端服务(Backend for Frontend),负责处理该终端的业务适配。
架构示意:
Web 端 → Web BFF → 微服务 / 数据层
移动端 → Mobile BFF → 微服务 / 数据层
小程序 → MiniApp BFF → 微服务 / 数据层
BFF 的职责是:
- 数据裁剪与聚合
- 终端特定逻辑(如移动端的弱网优化)
- API 协议适配(REST / GraphQL / gRPC)
3. 为什么需要 BFF?
- 减轻前端负担:不用拼装多接口数据,直接拿到所需结构。
- 减轻核心服务压力:BFF 层做适配,核心服务保持纯粹。
- 提升性能:BFF 可在边缘缓存数据,减少终端与后端的往返。
- 解耦演进:不同终端需求变化,不会影响核心后端。
4. 技术关键点
4.1 API 聚合
BFF 将多个微服务的接口聚合成一个终端友好的接口:
{
"user": { "id": 123, "name": "Tom" },
"orders": [{ "id": 1001, "amount": 199 }]
}
4.2 数据裁剪
移动端只返回必要字段,减少带宽:
- Web:返回订单详情、物流、推荐
- 移动端:只返回订单状态
4.3 协议适配
- Web 使用 GraphQL 查询
- 移动端使用 REST/JSON
- IoT 使用 gRPC(二进制更省流量)
4.4 缓存与边缘计算
- 在 BFF 层做缓存(Redis、边缘节点)
- 提升响应速度,减轻核心服务压力
5. 应用场景
5.1 电商平台
- Web BFF:提供全量商品信息、搜索过滤
- 移动 BFF:只提供轻量化商品卡片信息
- 小程序 BFF:优化弱网环境,支持离线缓存
5.2 金融应用
- 移动端需要更快的 API 响应(余额、转账记录)
- Web 端需要更详细的分析与报表
5.3 SaaS 多租户平台
- 不同客户 UI 层差异较大,通过 BFF 定制 API 输出
6. BFF vs API 网关
| 特性 | API 网关 | BFF |
|---|---|---|
| 职责 | 流量管理、安全、限流、认证 | 数据聚合、裁剪、适配 |
| 面向对象 | 所有客户端 | 特定终端 |
| 典型工具 | Kong、APISIX、Nginx | Node.js、Spring Boot、NestJS |
👉 API 网关更偏“流量治理”,BFF 更偏“业务适配” ,两者常常配合使用。
7. 挑战
- 运维成本增加:多个 BFF 服务需要维护和部署。
- 团队协作复杂:BFF 层需要懂前端业务,也要懂后端数据。
- 逻辑重复:多个 BFF 可能出现类似功能,需要治理。
8. 总结
BFF 是 多终端适配的最佳实践:
- 减轻前端负担
- 简化后端核心服务
- 提升用户体验
在 电商、金融、SaaS、多端应用 场景下,BFF 已经成为标配架构模式。
👉 一句话总结:
API 网关解决“请求进来怎么走”,BFF 解决“不同终端要什么数据”。