ADR 0206 — API 参考变成一个 Redoc 页面
状态
已接受。 2026-10-02(AT-359;所有者于 10月2日的决定)。修订(不编辑)ADR 0033 中关于发布的那一半:spec 仍然从代码生成(docs/reference/openapi.json、按类型的 DTO、表格测试),web 的 openapi:types:check 不变。
背景
ADR 0033 用 docusaurus-plugin-openapi-docs 和 docusaurus-theme-openapi-docs(5.1.2)发布参考:在 docs/reference/api/ 中生成 235 个 .mdx,由一份哈希清单锁定。这两个包会拖入 postman-collection@5.3.1,它把 @faker-js/faker@5.5.3 精确固定——High 告警 #43,GHSA-qxc2-j82w-r537。10月2日实测:该依赖链上没有任何父包有摆脱 faker 5.5.3 的版本,而把 override 指向 10.x 会让 docs:build 失败(v5 的 API 已被移除)。保留该插件就没有办法关闭这条告警。
决策
把这对包换成 Redocusaurus(redocusaurus 2.5.x):一个 Redoc 页面,带 SSR,位于 /reference/api/,读取同一份 docs/reference/openapi.json。选择它的原因:它是 Docusaurus 3 的 preset,在服务器端渲染(页面出现在构建的 HTML 中,无需浏览器即可检查),跟随站点主题,且不拉入 postman-collection 和 faker。
pnpm docs:generate不再生成.mdx和清单.openapi-manifest.json;docs/reference/api/从仓库中移除。- 侧边栏用一个指向
/reference/api/的链接取代按 tag 的分类。 scripts/docs/api-render-check.mjs仍然是构建后的守卫(0033 的教训:构建通过不等于页面能渲染),现在在两种语言的 HTML 中断言 spec 的标题以及每个操作各有一节。
后果
- 关闭告警 #43:
@faker-js/faker和postman-collection从website/的依赖树中消失。两个 override 失去了使用者而被移除(js-yaml@>=5.0.0 <5.2.2和undici@>=6.0.0 <6.28.1,它们只经由该插件到达),另外还有postman-code-generators的allowBuilds。 - 所有者接受的损失:每个操作一页的 235 个页面、按 tag 的侧边栏、每个操作的 URL(指向它们的外部链接会失效)、playground 和 cURL 片段。
- 守卫不打开浏览器:Redoc 的 hydration 失败抓不到;页面缺失、为空或没有操作则能抓到。