1.1 BFF 模式概述

1.1.1 BFF 概念

BFF(Backend For Frontend,服务于前端的后端) 是一种由 SoundCloud 提出的微服务架构模式。其核心思想是:为每一种前端客户端(Web、iOS、Android、小程序等)单独构建一个专属的后端服务,该服务负责聚合下游微服务的数据、适配前端特定的交互逻辑,并输出恰好满足该客户端需求的数据结构。

BFF 不是简单的 API 代理,而是一个有业务逻辑的中间层。它解决了传统微服务架构中“一个后端 API 试图适配所有前端”导致的接口臃肿、字段冗余、多次请求等问题。

核心原则:“你的前端需要什么,BFF 就给你什么。” —— 每个 BFF 只对一种客户端负责,输出该客户端最舒适的数据格式。

1.1.2 BFF 在微服务中的角色

在微服务架构中,BFF 处于客户端与下游微服务之间,扮演着以下关键角色:

  • 聚合器(Aggregator):将多个微服务的响应合并为一个响应,减少客户端请求次数。
  • 适配器(Adapter):将后端通用数据模型转换为前端特定视图模型(ViewModel)。
  • 编排器(Orchestrator):根据前端业务流程,编排多个微服务的调用顺序。
  • 安全网关(Security Gateway):集中处理身份认证、权限校验、会话管理。
  • 协议转换器(Protocol Translator):将后端 gRPC/Thrift 协议转换为前端友好的 HTTP/REST 或 GraphQL。

下图展示了 BFF 在微服务架构中的典型位置与交互关系:

BFF 在微服务架构中的角色 BFF 在微服务架构中的角色 Web 客户端 iOS 客户端 Android 客户端 Web BFF iOS BFF Android BFF 聚合 · 适配 · 编排 · 权限校验 · 协议转换 用户服务 订单服务 商品服务 ... 每个 BFF 只对一种客户端负责,调用下游微服务并返回定制化数据

1.1.3 BFF 与 API Gateway 的区别

很多开发者容易将 BFF 与 API Gateway 混淆。虽然两者都位于客户端与后端之间,但它们的职责边界、粒度、业务参与度有本质区别。下表从多个维度进行对比:

对比维度 API Gateway BFF
核心职责 统一入口、路由转发、限流、熔断、认证 数据聚合、视图适配、业务编排、权限校验
业务逻辑 无业务逻辑,纯基础设施层 包含前端专属业务逻辑
粒度 粗粒度,所有客户端共享一个网关 细粒度,每种客户端独立部署
数据输出 透传后端数据,不做裁剪 按需裁剪、聚合、格式化
协议转换 支持 HTTP/gRPC/WebSocket 多协议 通常只输出 HTTP/REST 或 GraphQL
变更影响 变更可能影响所有客户端 变更只影响对应客户端
部署方式 集中式部署 按客户端维度独立部署
典型技术 Kong、Zuul、Spring Cloud Gateway Node.js、Go、Java 轻量服务
实践建议:在大型微服务架构中,API Gateway 和 BFF 通常共存。API Gateway 作为全局入口处理横切关注点(限流、认证、日志),BFF 作为业务聚合层处理前端定制逻辑。两者形成“Gateway → BFF → Microservices”的三层调用链。

下图直观展示了 API Gateway 与 BFF 在架构中的不同位置与职责边界:

API Gateway 与 BFF 的架构对比 API Gateway 与 BFF 的架构对比 API Gateway 模式 客户端 API Gateway 路由 · 限流 · 认证 微服务 透传数据,无裁剪 BFF 模式 客户端 BFF 聚合 · 适配 · 权限 微服务 按需裁剪,定制输出 API Gateway 是基础设施层,BFF 是业务适配层 两者可共存:Gateway 在前,BFF 在后

1.1.4 为什么 BFF 需要独立的权限验证

在 BFF 模式中,权限验证不再是简单的“透传 Token 到后端”。BFF 需要根据前端客户端的类型(Web、Mobile、小程序)执行差异化的权限策略:

  • Web 端:通常使用 Cookie + Session 或 OAuth2 Authorization Code 流程。
  • 移动端:使用 JWT + Refresh Token,支持离线 Token 刷新。
  • 小程序端:依赖平台登录态( code 换取 session_key)。

BFF 作为权限校验的第一道防线,需要完成以下工作:

  1. Token 解析与验证:从请求头、Cookie 或 Query 参数中提取 Token,验证签名和有效期。
  2. 上下文注入:将解析后的用户身份、角色、权限范围注入到请求上下文。
  3. 细粒度权限校验:根据 API 路径、HTTP 方法、资源 ID 判断当前用户是否有操作权限。
  4. 错误响应:权限不足时返回 401/403,并携带清晰的错误码。
常见误区:不要在 BFF 中重复实现完整的用户管理或角色管理。BFF 应依赖下游的 Auth Service 或 IAM 系统 完成用户认证和角色查询,BFF 只做校验与决策,不做身份存储。