← [ BACK_TO_NOTES ]

Protocol Versioning

协议版本化管理消息格式与交互行为的演进,以 AI 事件流为例说明协商、未知版本和兼容边界。

#concept #evergreen #ai #architecture

[!info] related notes

Protocol Versioning

协议版本化管理通信双方对消息格式和交互行为的约定,不限于 SSE。本文以 AI 应用事件流为例;SSE 自身的线格式与应用事件协议版本是不同层次。

版本标识不等于兼容

版本可以在连接协商、URL、请求头或事件 envelope 中表达。放在哪里不决定是“大版本”还是“小版本”;关键是消费者能否正确理解行为。

除字段外,还要考虑事件顺序、重复投递、恢复游标、完成条件、错误处理和审批语义。即使 JSON 结构不变,行为变化也可能破坏旧客户端。

接收规则

读取并校验版本标识
  → 已支持版本:按对应格式和行为处理
  → 缺版本:只有契约明确约定 legacy 默认值时才采用该值
  → 未知版本:拒绝、协商或请求升级,不默认按 v1 处理

连接协商还需定义双方支持版本集合、选定结果与无交集时的失败行为。事件中自报版本不是消费者支持该版本的证明。

未知事件类型

  • 只有契约规定为可忽略的扩展事件,旧客户端才可跳过。
  • 未知的审批、权限、状态变更或终态事件不能随意忽略后继续执行。
  • 新增 heartbeat 一类可选事件也需确认旧解析器行为;添加一个类型字段不会自动获得向后兼容性。

发布与恢复

先部署能识别新旧协议的消费者,再按策略启用新生产者;保留兼容窗口和明确的弃用路径。持久化事件回放时,还需能识别事件当时的版本,而不是全部交给当前解析器。

测试覆盖新旧生产者与消费者组合、未知版本、未知关键事件、重复事件和断线恢复。具体字段位置与名称遵循项目既有 事件契约,不在概念笔记中另立一套全局协议。

创建于 2026/6/30 更新于 2026/10/6
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本