跳转到内容

API 与 protobuf 演进策略

SyncTV 当前按全新项目处理协议演进,不承诺对未发布或未稳定接口做反向兼容。项目内自有 protobuf 可以规整字段顺序、序号和消息结构,不需要为历史草案保留 reserved

但以下文件不是 SyncTV 自有协议,不应修改:

  • synctv-proto/proto/buf/validate/validate.proto
  • 其他第三方 vendored proto 或生成工具依赖文件
协议主要文件或入口适用场景
HTTP/OpenAPIsynctv-api/src/http/*/api-docs/openapi.jsonWeb、移动端、第三方 SDK
gRPCsynctv-proto/proto/client.protoadmin.proto、provider proto强类型客户端、内部服务、调试
Realtime WebSocketClientMessageServerMessage房间聊天、播放、WebRTC 和资源观察
management gRPCmanagement proto 和 CLI运维控制面,不面向普通客户端
变更类型当前策略
新增业务能力优先补清晰消息、字段、错误和权限语义
字段命名不清晰可以重命名并重新生成,但必须更新所有调用方
字段序号混乱自有 proto 可以重新编号,不保留 reserved
删除未使用字段可以删除,补测试确认没有代码引用
第三方 proto不修改,除非升级该依赖来源并有明确记录
错误码保持区间语义清晰,避免同一场景多套码
  1. 确认要改的是 SyncTV 自有 proto,不是第三方 vendored proto。
  2. 调整 .proto 字段、序号、注释和 service RPC。
  3. 重新生成 Rust 代码。
  4. 更新 HTTP/gRPC/Realtime 实现和测试。
  5. 更新 gRPC 调试Realtime APISDK 与 API 示例
  6. 如影响客户端行为,更新 客户端集成指南错误参考
  7. 运行 proto、API 和文档检查。
  1. 明确认证、权限、限流、body size 和错误分类。
  2. 更新 handler、OpenAPI annotations 和测试。
  3. 启动 openapi feature,确认 Swagger UI 和 JSON 可生成。
  4. 更新示例、错误处理和客户端文档。
  5. 如果是房间内状态,判断是否也要发 Realtime 事件或资源观察失效。

Realtime 变更要特别注意:

  • ClientMessageServerMessageoneof 字段要能被客户端清晰分发。
  • 新增资源观察类型时,需要定义版本来源、payload、触发事件和 delivery mode 行为。
  • 断线重连语义必须明确:哪些状态要重建,哪些版本可复用。
  • 不要把大列表或大二进制内容直接塞进频繁广播消息。
改动必改文档
登录、2FA、OAuth2、token客户端集成、安全模型、错误参考
房间、权限、成员房间权限、用户指南、常见任务
播放、Provider、proxy播放与代理模型、Provider 配方
Realtime 消息Realtime API、SDK 与 API 示例
配置字段配置总索引、完整配置示例、专题配置页
运维行为观测、排障、容量规划或密钥轮换