概述目标:在API演进过程中保持兼容性,通过标记废弃、增加而非修改、版本路由与契约测试保障稳定。适用:多客户端协同、长期维护的公共API与内部平台。核心与实战基本规范片段(3.0.3):openapi: 3.0.3 info: title: Orders API version: 2.0.0 paths: /v2/orders: get: summary: List orders parameters: - in: query name: page_size schema: { type: integer, minimum: 1, maximum: 100 } - in: query name: cursor schema: { type: string } responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/OrderList' components: schemas: Order: type: object properties: id: { type: string } created_at: { type: string, format: date-time } status: { type: string, enum: [PAID, PENDING, CANCELED] } amount: { type: number } required: [id, created_at, status] OrderV1: type: object properties: id: { type: string } created_at: { type: string, format: date-time } total: { type: number, deprecated: true, description: 'use amount' } required: [id, created_at] OrderList: type: object properties: data: type: array items: oneOf: - $ref: '#/components/schemas/Order' - $ref: '#/components/schemas/OrderV1' next_cursor: { type: string, nullable: true } 废弃与日落:-- 在v1接口头部添加: -- Sunset: Wed, 31 Dec 2025 23:59:59 GMT -- Link: </v2/orders>; rel="successor-version" 版本路由策略:路径版本`/v1/...`与`/v2/...`并存;或以`Accept: application/vnd.example.orders+json;version=2`进行协商。示例契约测试思路:-- 固定示例请求与期望响应结构,对新增字段保持容忍(不破坏旧客户端) 兼容演进:-- 仅新增可选字段与枚举值,避免移除与类型变更;旧字段标记deprecated并保留一段时间 验证与监控规范校验:使用OpenAPI校验器验证schema与引用;在CI中阻断不兼容变更。客户端影响面:统计不同版本的请求比例;监控旧版本错误率与迁移进度。观察头:检查`Sunset`与`Link`是否下发,帮助客户端迁移。常见误区直接修改字段类型或移除必填破坏兼容;应仅新增可选字段。未提供 successor 链接与日落计划,导致客户端无迁移指引。版本分支泛滥;需控制生命周期并合并维护成本。结语以向后兼容为核心的OpenAPI版本治理,可在长期演进中保持客户端稳定,配合标记与监控实现平滑迁移。

发表评论 取消回复