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

发表评论 取消回复