Skip to content

docs(protocol): http-protocol 的 API Discovery 拆成两段式 —— REST 形状与 dispatcher 形状分开 (#4817) - #4826

Merged
xuyushun441-sys merged 1 commit into
mainfrom
claude/issue-4817-http-protocol-discovery-shapes
Aug 3, 2026
Merged

docs(protocol): http-protocol 的 API Discovery 拆成两段式 —— REST 形状与 dispatcher 形状分开 (#4817)#4826
xuyushun441-sys merged 1 commit into
mainfrom
claude/issue-4817-http-protocol-discovery-shapes

Conversation

@xuyushun441-sys

Copy link
Copy Markdown
Contributor

Fixes #4817

问题

content/docs/protocol/kernel/http-protocol.mdxAPI Discovery 一节此前写着「/.well-known/objectstack 和版本化的 /api/v1/discovery 路由都直接返回 discovery 文档 —— 两者之间没有 HTTP 重定向」,随后给出一份响应示例。

那份示例其实是 dispatcher 的形状(name / environment / locale),却被标注成两条路径共同的返回体。在挂了 @objectstack/rest 的常规组合里,两条路径返回的不是同一形状。locale 更是读者会直接拿去初始化 i18n 的字段 —— 从 /api/v1/discovery 读它永远读不到。

改动

按 issue 的建议处置,改成与 content/docs/api/index.mdx(#4816 刚核实过)一致的两段式,用的是同一套措辞而不是第二种说法:

  1. GET /api/v1(与 GET /api/v1/discovery) —— REST 形状:version / apiName / routes / services / capabilities,外加 rest-server 追加的 scoping。并明写三条易错点:versionapi.version 覆盖后的路径段("v1",不是 2.1.0 这类语义版本);这里没有 name / environment / locale;scoping 由 REST 层追加。
  2. GET /.well-known/objectstack —— dispatcher 形状:{ "data": ... } 包裹,含 name / environment / features / locale,并说明它没有 capabilitiesroutes 另有 endpoints 兼容别名。
  3. 「两条路径同文档」被限定为 REST-less 组合才成立,并点名 ADR-0076 D11 单一 owner 规则(REST 挂上后 dispatcher 让出 ${prefix}/discovery);裸 /api/v1 只有 REST 会注册。

不再有混合示例。

每个字段的来源(逐一读过实现后写的)

示例字段 追溯到
version / apiName / routes / services / capabilities ObjectStackProtocolImplementation.getDiscovery() 的 return(packages/metadata-protocol/src/protocol.ts)
version 被覆盖成 "v1" registerDiscoveryEndpointsdiscovery.version = this.config.api.version(packages/rest/src/rest-server.ts)
capabilities.transactionalBatchdescription 同上,rest-server 里的字面量
scoping.{enabled,resolution,scoped,environmentId} 同上;默认值 false / 'auto' 取自 RestServerConfig 的 zod default
name: "ObjectOS" / version: "1.0.0" / environment / features / locale / endpoints HttpDispatcher.getDiscoveryInfo() 的 return(packages/runtime/src/http-dispatcher.ts)
{ "data": ... } 包裹 res.json({ data: await dispatcher.getDiscoveryInfo(prefix) })(packages/runtime/src/dispatcher-plugin.ts)
services.*.message 文案 serviceUnavailableMessage() / REMEDY_DETAIL(packages/spec/src/system/core-services.zod.ts)
routes 的键集合 ApiRoutesSchema(packages/spec/src/api/discovery.zod.ts)

git grep graphql -- packages/spec/src/api/ 为空 —— 两份示例都没有 "graphql" 或任何无 schema/handler 支撑的字段。

验证

  • node scripts/check-doc-authoring.mjs215 files clean
  • node scripts/check-role-word.mjsOK (43 baselined file(s), no new occurrences)
  • pnpm --filter @objectstack/spec check:docs246 generated files in sync with packages/spec
  • pnpm check:release-notes / pnpm check:nul-bytes → OK
  • 单文件 MDX 编译通过(@mdx-js/mdx compile)

Docs-only,changeset 用空 frontmatter 形式(releases nothing),沿用 .changeset/retire-runtime-capabilities-doc-page.md 的先例。content/docs/releases/ 未触碰。

范围

只改这一节。issue 末尾「顺带」提到的 .claude/workflows/docs-accuracy-audit.js 路径失效(仍指向改名前的 protocol/objectos/*)按派发要求未并入,另行分诊。

🤖 Generated with Claude Code

https://claude.ai/code/session_018iARDqtrhQgz6fVHDeDkbQ


Generated by Claude Code

…tcher 形状分开 (#4817)

该页此前声称 `/.well-known/objectstack` 与 `/api/v1/discovery` 「都直接返回同一份
discovery 文档」,并给出一份混合示例(`name` / `version: "2.1.0"` / `environment` /
`locale`)。这份示例其实是 dispatcher `getDiscoveryInfo()` 的形状,而挂了
`@objectstack/rest` 的常规组合下 `/api/v1/discovery` 返回的是
`{ version, apiName, routes, services, capabilities }` + rest-server 追加的
`scoping`,没有 `name` / `environment` / `locale`,`version` 还被 `api.version`
覆盖成 `"v1"`。

改为与 `content/docs/api/index.mdx`(#4816 已核实)一致的两段式:
- `GET /api/v1`(与 `/api/v1/discovery`)一节给 REST 形状;
- `GET /.well-known/objectstack` 一节给 dispatcher 形状(`{ "data": ... }` 包裹,
  含 `name` / `environment` / `features` / `locale`);
- 「两条路径同文档」限定为 REST-less 组合,并点名 ADR-0076 D11 单一 owner 规则。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018iARDqtrhQgz6fVHDeDkbQ
@vercel

vercel Bot commented Aug 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 3, 2026 8:54am

Request Review

@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation tooling labels Aug 3, 2026
@xuyushun441-sys
xuyushun441-sys marked this pull request as ready for review August 3, 2026 09:13
@xuyushun441-sys
xuyushun441-sys added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit cb680f2 Aug 3, 2026
19 checks passed
@xuyushun441-sys
xuyushun441-sys deleted the claude/issue-4817-http-protocol-discovery-shapes branch August 3, 2026 09:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tooling

Projects

None yet

2 participants