BFF 模式:多终端时代的后端最佳实践

235 阅读3分钟

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、NginxNode.js、Spring Boot、NestJS

👉 API 网关更偏“流量治理”,BFF 更偏“业务适配” ,两者常常配合使用。


7. 挑战

  • 运维成本增加:多个 BFF 服务需要维护和部署。
  • 团队协作复杂:BFF 层需要懂前端业务,也要懂后端数据。
  • 逻辑重复:多个 BFF 可能出现类似功能,需要治理。

8. 总结

BFF 是 多终端适配的最佳实践

  • 减轻前端负担
  • 简化后端核心服务
  • 提升用户体验

电商、金融、SaaS、多端应用 场景下,BFF 已经成为标配架构模式。

👉 一句话总结:
API 网关解决“请求进来怎么走”,BFF 解决“不同终端要什么数据”。