为什么需要
API 一旦被外部客户端使用,就不能随意改动——因为改了会破坏调用方。
但业务在演进,接口必须变化。因此需要版本管理。
三种常见方式
一、URL 路径版本
/api/v1/users
/api/v2/users优点:直观、易于理解和调试;可以在网关层做路由;不同版本可以独立部署。
缺点:URL 中引入版本号,与"资源 URI 应该稳定"的 REST 理念有张力;版本多了以后维护成本高。
这是最常见的方式。
二、请求头版本
GET /api/users
Accept: application/vnd.company.v2+json或者自定义头:
X-API-Version: 2优点:URL 保持稳定;可以在内容协商的框架下处理。
缺点:不够直观,调试时需要在请求头里加东西;客户端实现稍复杂。
三、查询参数版本
/api/users?version=2优点:实现简单。
缺点:污染查询参数;不够规范;容易与业务参数混淆。
兼容性优先于版本号
最重要的原则:版本升级应该是最后手段,而不是常规操作。
向后兼容的改动(不需要新版本):
- 新增可选的请求参数;
- 新增响应字段(客户端应忽略未知字段);
- 新增新的接口端点;
- 新增可选的请求头。
破坏性改动(需要新版本或慎重处理):
- 删除响应字段;
- 改变字段类型或含义;
- 把可选参数改成必填;
- 改变错误码的语义;
- 改变认证方式。
实践建议:
一、客户端遵循"宽容原则"——忽略不认识的响应字段,这样服务端才能安全地新增字段。
二、服务端谨慎删除字段——先标记为 deprecated,给足迁移期,在监控确认无人使用后再移除。
弃用流程
一个规范的做法:
- 公告:通过文档、邮件、响应头告知。
Deprecation: true
Sunset: Sat, 31 Dec 2026 23:59:59 GMT(Deprecation 和 Sunset 是正在标准化的 HTTP 响应头,用于告知 API 的弃用状态和时间。)
- 监控:统计旧版本的使用量和调用方。
- 迁移支持:提供迁移文档,必要时主动联系大客户。
- 宽限期:通常 6–12 个月。
- 下线。
一个务实策略
内部 API:如果所有调用方都在自己控制范围内(如同一个组织内的几个服务),可以不用版本号,直接协调改动——版本管理的成本可能高于收益。
对外 API:必须认真做版本管理和兼容性。
灰度发布 + 双写:重大变更前,可以让新旧版本并行运行一段时间,通过监控确认新版本正常后再切换。
文档
版本管理与文档密不可分。每个版本都应该有:
- 清晰的接口文档;
- 变更日志(Changelog);
- 迁移指南(从 v1 到 v2 要改什么)。
OpenAPI(原 Swagger)是目前最主流 API 描述规范,支持自动生成文档和客户端代码。
说明:本文为 API 设计的知识整理。