服务端与数据 / 进阶
OpenAPI 不只写文档:让契约参与请求校验
把 OpenAPI 作为可执行契约:定义统一错误结构、在边界校验输入、生成客户端类型,并在 CI 中检查破坏性变更。
先让规范描述真实边界
长度、格式、枚举、是否允许额外字段都应写进契约。只写字段名和示例,生成出来的文档看似完整,实际无法承担校验。
EXAMPLE / 01OpenAPI
components:
schemas:
CreateUserInput:
type: object
additionalProperties: false
required: [email, displayName]
properties:
email:
type: string
format: email
maxLength: 254
displayName:
type: string
minLength: 1
maxLength: 50在 HTTP 边界校验,不让脏数据进入业务层
请求校验失败统一返回 400 或 422,并提供稳定错误码和字段路径。业务层接收到的参数应已经完成基本形状校验,但唯一性、余额和权限仍属于业务规则,不能完全交给 Schema。
EXAMPLE / 02OpenAPI
{
"error": {
"code": "VALIDATION_FAILED",
"message": "请求参数不合法",
"details": [
{ "path": "body.email", "reason": "format" }
]
}
}在 CI 阻止破坏性变更
对 OpenAPI 文件做语法和引用检查;与主分支规范比较,识别删除字段、收紧枚举等 breaking change;从规范生成 TypeScript 类型或 SDK,并检查生成结果是否更新;用契约测试验证关键响应确实符合 Schema。
新增可选字段通常是兼容变更;删除字段、改变类型或把可选改为必填,需要新版本或明确迁移窗口。