Web 应用
API 与 BFF 边界
让浏览器、Embedded BFF 和业务服务各自只承担明确职责。
浏览器负责
交互状态、展示、可访问性、用户输入和对已声明 Contract 的调用。不要在浏览器复制权限判定或核心业务规则。
Embedded BFF 可以负责
- 服务器侧凭据和 cookie 处理。
- 面向页面的请求聚合与响应整形。
- 协议适配、缓存和安全 header。
它不应创建新的业务事实、成为业务数据 owner,或在没有 Policy owner 的情况下决定授权。
每个请求都要覆盖
| Case | UI behavior | Contract evidence |
|---|---|---|
| success | render stable result | response schema |
| empty | explicit empty state | empty semantics |
| validation error | field/action feedback | error code mapping |
| unauthorized | stop and explain next action | auth policy case |
| dependency failure | recover or retry safely | timeout/error contract |
如果 UI 需要猜错误含义,先修 Contract,不要在组件里堆字符串判断。