版本与兼容性
API 只有一个主版本 /v1,并且只增不减。今天编写的集成在新功能推出后仍能继续工作:它依赖的任何内容都不会被重命名、删除或赋予新的含义。
版本号
API 有一个版本号,例如 1.62.0。每次发布时版本号都会变化:
- 新增内容(接口、字段、事件)时,次版本号增加;
- 只更正说明或消息文本、没有其他变化时,修订号增加。
随时可以查看某个地址所提供的版本:
| 位置 | 内容 |
|---|---|
GET /openapi.json | 规范的 info.version |
| 事件记录中的每个事件和每次 Webhook 投递 | api_version,即 data 所遵循的结构定义的版本 |
GET /v1/health 也有 version,但它是提供该地址的 Sursa 发行版的版本,而不是 API 的版本。
次版本不能自选:每个请求都由当前版本处理。有了下面的规则,这样做是安全的。
/v1 中可能变化的内容
以下变更可能出现在任何次版本中。编写集成时,请确保它们不会造成破坏:
- 新的接口。
- 新的可选参数和请求字段。不带它们的请求行为不变。
- 响应、对象和事件中的新字段。
- 响应中枚举的新值,例如新的卡片状态或新的事件类型。
- 新的错误码和新的响应头。
- 放宽的限制:更长的最大长度、更宽的取值范围。
- 错误的
message文本和说明的措辞调整。
代码必须能容忍的情况
- 忽略不认识的字段。响应中的字段比预期多时不要报错,也不要使用会拒绝多余字段的严格结构定义。
- 接受不认识的枚举值。响应中的每个枚举都可能增加值。请把不认识的值当作“其他”,而不是错误。
- 跳过不认识的事件类型,Webhook 和流中都是如此。
- 按 HTTP 状态处理不认识的错误码:参见错误。
- 不要依赖 JSON 对象中字段的顺序,也不要依赖消息的确切文本。
/v1 中永远不变的内容
- 路径、参数、字段或枚举值永远不会被重命名或删除。
- 字段的类型永远不变,字段也不会被赋予新的含义(例如换用新的单位)。
- 今天被接受的请求,以后也不会被拒绝。
- 成功响应的状态码保持不变。
- 错误码的含义保持不变,错误响应中
detail字段的形式也保持不变。 - 事件类型永远不会被重命名或删除,其
data只会增加字段。
破坏性变更
如果将来确实需要不兼容的变更,会以新的主版本(例如 /v2)发布,与 /v1 并存。/v1 照常工作,保持不变,两个版本同时运行。
某个路由即将停用时:
- 它在规范中标记为
deprecated,并在更新日志中列出,注明停用日期。 - 它的响应带有
Deprecation: true和Sunset: <date>头。 - 公告后它至少继续工作 180 天。使用它的 API 密钥所属的组织会至少提前 90 天收到书面通知。
- 停用日期过后,它在之后的 90 天内返回
410,错误码为api.gone。
请在日志或监控中留意 Deprecation 头:它是您使用的路由即将下线的最早信号。
及时了解变更
本门户的更新日志列出了每次发布新增和弃用的内容。升级自己的集成之前,请对照代码查看自构建时所依据的版本以来的所有条目。