Linux上Swagger OpenAPI设计规范推荐
一 规范总览与项目结构
二 命名与版本控制
- 资源命名:使用名词复数表达资源集合,避免动词;层级表达关系,例如:/users/{id}/orders。
- 版本控制:优先采用URL路径版本(如:/v1),保持路径与版本强绑定,便于路由与网关治理。
- 统一前缀:为API设置统一前缀(如:/api),与业务路由解耦,便于网关与版本共存。
三 路径操作与请求响应规范
- 操作语义:严格遵循HTTP方法语义——GET(查询)、POST(创建)、PUT(全量更新)、PATCH(部分更新)、DELETE(删除)。
- 路径参数:路径变量使用名词且为必填;在components.parameters中统一定义可复用参数(如:ProductIdParam)。
- 查询参数:对分页、过滤、排序统一建模,推荐可复用参数(如:PageParam、LimitParam),并设置约束(如:minimum: 1、maximum: 100)。
- 请求体:使用requestBody承载复杂输入,明确content-type(如:application/json),并在components.schemas中定义输入/输出模型(如:ProductInput 与 Product)。
- 响应体:每个操作至少定义200/201成功响应与常见错误响应(如:400/401/403/404/500),优先复用components.responses;为错误响应提供统一错误模型与示例,便于客户端处理。
四 数据模型与组件复用
- 模型设计:在components.schemas中集中定义模型,使用required标注必填字段,为字符串设置maxLength、为数值设置minimum/maximum,为时间使用date-time格式。
- 复用机制:将通用参数、响应、安全方案抽取到components,通过**$ref**引用,避免重复与漂移。
- 集合与分页:列表返回统一结构(如:ProductList { data: [], pagination: {} }),分页参数与元信息标准化,便于SDK与前端统一处理。
- 示例与契约测试:为关键模型与接口提供examples,用于文档展示与自动化契约测试,提升前后端协同效率。
五 安全与运维部署
- 认证与授权:在components.securitySchemes定义Bearer/JWT或HTTP Basic方案,并在security与具体operation上声明使用范围;必要时结合OAuth2流程。
- 传输安全:全站启用HTTPS,禁止明文协议;对生产环境的Swagger UI与Editor访问进行访问控制(如:IP白名单、Basic Auth或网关鉴权)。
- 部署与交付:优先Docker容器化部署Swagger UI/Editor,或通过Nginx/Apache托管静态资源;在CI中执行swagger-cli校验、openapi-generator-cli代码生成与回归测试,确保规范与实现一致。