概述目标:在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版本治理,可在长期演进中保持客户端稳定,配合标记与监控实现平滑迁移。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部