2026-09-23·by Sijie Wang#software#project#flexmesh

bff-thin-adapter

BFF:一层薄适配器

负责人本就最擅长的那条轴线——后端——却是整个项目里最小的仓库:一个只有 12 次提交的 FastAPI BFF(backend-for-frontend,即"前端专属后端"——一台由客户团队拥有、专为某一个前端的需求量身定制的薄服务器)。这不是偷懒,而是这个项目里最资深的架构判断:把自己最强的那条轴线省着用,恰好只用在你控制不了的接缝处,其余一切都用 BaaS 打发掉(BaaS 即 backend-as-a-service,后端即服务;这里由自托管的 Appwrite 接管了身份认证、数据库、存储)。

这层薄适配器实际在做的事——三件工作,本质上都是"适配那些你控制不了的东西":

  1. 双身份桥接:注册/登录在同一次调用里同时写入合作方的 API(SuperRoute)和 Appwrite(routes/auth.py——third_api_signup 与 Appwrite 的 Users 并排调用);应用端看到的是单一的登录认证,底层两套系统则保持一致。
  2. 合作方 API 净化third_api.py 里的 _flatten 把第三方响应里的 message 字段——"可能是字符串/列表/嵌套列表/对象"——在边界处规整成一个可预测的形状,让合作方格式上的漂移永远到不了应用这一侧(对应提交:"Improve API response format handling",2025-06-09)。启动时强制 HTTPS——这条边界拒绝以不安全的方式存在。
  3. 版本闸门routes/version.py):最低版本/强制更新的判断留在服务端做出——这是唯一一项绝不能烘焙进客户端的控制权。

这个形状可以推广:只写用来适配你控制不了的东西的那部分后端。 项目能控制的一切都放在 BaaS 或客户端里;定制代码恰好只存在于两个外部系统(一个合作方的 API、一个由应用商店分发的应用群体)相遇的地方。

面试原型:"跟我讲讲一个架构决策"——我最强的技能只换来了 12 次提交,而且被放在合作方 API 与两套身份系统相遇的地方;真正的自律,是知道哪里不该写代码。

cited by
about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →

bff-thin-adapter