版本与兼容性

API 版本可能体现在 Base URL、协议 Header、请求字段、资源版本或 SDK 包版本中。客户端应保留当前环境提供的版本信息,并在升级前验证实际任务;不要根据服务运行版本推断接口兼容范围。

识别版本位置

版本位置

示例形态

处理方式

Base URL 或路径

Genesis Base URL 中的 /v1

从当前环境复制完整 Base URL,不自行增加、删除或替换版本段。

协议 Header

Messages 接口要求的协议版本 Header

使用接口页给出的值;不同协议不能共用。

请求对象

工作流、模板或其他资源的版本字段

将其视为目标资源契约的一部分,不当作整个 Product API 版本。

并发控制字段

expected_version、策略版本或类似字段

用于检测资源是否已被其他调用修改;冲突后重新读取资源。

SDK 包版本

Go 模块或 Python 包版本

在应用依赖中固定,并在升级时运行接口和业务测试。

服务运行信息

组件构建版本、构建标识或运行状态

仅用于诊断,不等同于公开 API 的兼容性承诺。

同一个响应中出现 version 字段,不足以证明它是 API 版本。先根据接口页确认该字段描述协议、资源、工作流定义还是并发状态。

保持地址和协议一致

Genesis 接口页中的路径都相对于当前 Genesis Base URL。Base URL 已经包含 /v1 时,不要在 SDK base_url 或手写请求中再追加版本段。

Product API 页面中的请求假设 Product Base URL 已经包含 /newmoi/newmoi 是当前产品路径前缀,不应被客户端替换成 Genesis 的 /v1

调用 Messages、A2A、SSE 等协议接口时,还应保持以下内容一致:

  • 请求和响应对象属于同一协议;

  • 协议版本 Header 来自当前接口页;

  • 流式事件按当前接口的结束条件处理;

  • SDK 配置与原始 HTTP 示例使用同一 Base URL 和认证契约。

编写可演进的客户端

在接口公开契约允许的范围内:

  • 只发送已记录的请求字段,不通过猜测添加新字段;

  • 只对业务必须识别的枚举值建立自动动作;遇到未知值时停止自动推进并保留原始值;

  • 不依赖 JSON 字段顺序、对象键顺序或未承诺的列表顺序;

  • 区分缺少字段、字段为 null、空数组和空字符串;

  • 按响应 Content-Type 选择 JSON、SSE 或文件流解析器;

  • 保存服务端返回的资源和任务 ID,不根据显示名称重新推导;

  • 将超时、分页上限、重试和未知状态处理放在业务层显式配置。

使用类型化 SDK 时,字段解码和未知字段行为由该 SDK 版本决定。不要在 SDK 外再次复制一套响应 Schema;升级 SDK 后通过测试确认新增字段、枚举和返回类型是否影响应用。

固定和升级 SDK 版本

生产应用应在依赖文件中固定经过验证的 SDK 版本。升级时:

  1. 阅读目标 SDK 版本的发布说明和迁移说明;

  2. 在独立环境安装目标版本;

  3. 验证身份认证、工作区选择和一个只读请求;

  4. 验证应用实际使用的创建、查询、分页、流式和异步任务;

  5. 验证错误对象、超时和重试逻辑;

  6. 小范围发布并保留回退到原版本的能力。

不要只根据安装成功或编译通过判断兼容。接口路径、默认超时、返回类型和错误封装的变化可能只在运行时出现。

处理资源版本冲突

部分更新操作要求调用方提供读取时获得的版本。它用于防止覆盖其他调用方已经提交的修改。

读取资源及当前版本
→ 基于该版本构造修改
→ 提交期望版本
→ 成功后保存新版本
→ 收到冲突时重新读取并决定怎样合并

收到 409 或明确的版本冲突后,不要自动把旧请求套到新版本上。先比较服务端当前状态和原修改意图,再由业务决定重新提交、合并或放弃。

兼容性信息不足时

当前文档没有承诺统一的接口弃用周期、兼容年限或旧版本保留数量。因此:

  • 不根据组件运行信息推算支持期限;

  • 不把测试环境仍可调用的旧路径写成稳定兼容入口;

  • 不依赖接口没有明确公开的旧字段或响应形态;

  • 发布前以当前环境的接口说明、SDK 发布材料和实际测试结果为准;

  • 如果升级影响关键业务,保留旧客户端和配置的可回退版本。

具体接口确认弃用、迁移路径或替代字段后,应将说明放在该接口页,并链接到对应迁移任务。通用页不维护未经确认的时间表。

下一步

最后更新于