3. 路径与操作定义:路径对象、操作对象与核心标记
路径与操作是 OpenAPI 文档的骨架。路径对象(Path Object)定义 API 的端点 URL 模板,操作对象(Operation Object)描述该端点上允许的 HTTP 方法及其语义。本章聚焦路径与操作的结构化定义,包括 operationId、summary、description 和 deprecated 标记,确保接口文档既机器可读又人类可理解。
3.1 路径对象(Path Object)
路径对象是 OpenAPI 文档中 paths 字段下的键值对。键是相对路径模板(如 /users/{userId}),值是该路径上所有 HTTP 方法的操作描述。路径模板支持 {参数名} 格式的路径参数,用于动态路由。
| 字段 | 类型 | 说明 |
|---|---|---|
summary |
string | 路径的简短摘要,用于文档导航 |
description |
string | 路径的详细说明,支持 CommonMark 语法 |
get / post / put / delete / … |
Operation Object | 每个 HTTP 方法对应一个操作对象 |
parameters |
array | 路径级别的公共参数,适用于该路径下所有操作 |
路径设计原则:路径模板应使用名词复数形式(如
/orders),避免动词;路径参数使用驼峰或 kebab-case 保持一致性;路径层级不超过 3 层,避免过度嵌套。
3.2 操作对象(Operation Object)
操作对象定义单个 HTTP 方法的具体行为。每个操作对象包含请求参数、请求体、响应定义、安全要求等核心信息。以下是操作对象的关键字段:
operationId—— 操作的唯一标识符,用于代码生成和日志追踪,必须全局唯一summary—— 操作的简短标题(如“获取用户列表”),用于文档目录和 API 客户端description—— 操作的详细说明,可包含使用场景、业务规则、前置条件等deprecated—— 布尔值标记,指示该操作是否已废弃,默认falseparameters—— 操作级别的参数列表,覆盖路径级别的同名参数requestBody—— 仅适用于POST/PUT/PATCH,描述请求体结构responses—— 必须字段,定义所有可能的 HTTP 状态码响应
operationId 命名规范:推荐使用
动词+名词 格式,如 getUserById、createOrder。避免使用空格、特殊字符,保持与编程语言标识符兼容。
3.3 GET / POST / PUT / DELETE 语义对比
| HTTP 方法 | 幂等性 | 安全性 | 请求体 | 典型场景 |
|---|---|---|---|---|
| GET | 是 | 是 | 无 | 查询资源列表或单个资源 |
| POST | 否 | 否 | 有 | 创建新资源、提交表单、触发操作 |
| PUT | 是 | 否 | 有 | 全量替换资源、更新指定 ID 的资源 |
| DELETE | 是 | 否 | 无 | 删除指定资源 |
常见误区:POST 用于创建资源时,如果客户端重复提交,可能导致重复创建。建议在 POST 响应中返回 201 Created 并包含新资源的 Location 头;对于幂等创建需求,应使用 PUT 或客户端生成 ID。
3.4 deprecated 标记与版本管理
deprecated 标记用于告知 API 消费者该操作即将移除,应迁移到替代方案。在 OpenAPI 3.x 中,deprecated 可应用于操作对象、参数、模式属性等多个层级。标记为 true 的操作仍可正常调用,但文档和工具应提示使用者避免新集成。
- 操作级别:
deprecated: true表示整个端点方法废弃 - 参数级别: 某个查询参数或路径参数废弃
- 属性级别: 响应或请求体中的某个字段废弃
最佳实践:废弃操作应在
description 中注明替代的 operationId 或路径,并给出迁移时间线。例如:"此接口将于 2025-06-30 移除,请使用 /v2/users 替代。"
3.5 路径与操作定义示例
paths:
/users/{userId}:
get:
operationId: getUserById
summary: 根据用户 ID 获取用户详情
description: 返回指定用户的完整信息,包括姓名、邮箱、角色等。
deprecated: false
parameters:
- name: userId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: 成功返回用户对象
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'404':
description: 用户不存在
delete:
operationId: deleteUser
summary: 删除指定用户
description: 软删除用户,保留数据 30 天后物理清除。
deprecated: true
responses:
'204':
description: 删除成功,无返回内容
'404':
description: 用户不存在
3.6 路径与操作结构图
3.7 操作对象字段速查表
| 字段 | 必需 | 类型 | 说明 |
|---|---|---|---|
operationId |
推荐 | string | 全局唯一标识,用于 SDK 生成和日志 |
summary |
推荐 | string | 简短标题,用于文档目录 |
description |
否 | string | 详细说明,支持 CommonMark 语法 |
deprecated |
否 | boolean | 默认 false,标记为 true 时提示废弃 |
parameters |
否 | array | 操作级别参数,覆盖路径级别同名参数 |
requestBody |
POST/PUT 必需 | Request Body Object | 描述请求体结构和媒体类型 |
responses |
是 | Responses Object | 定义所有可能的 HTTP 状态码响应 |
security |
否 | array | 操作级别的安全要求,覆盖全局安全定义 |
3.8 路径与操作定义检查清单
- 路径命名:使用名词复数,避免动词,路径参数用
{}包裹 - operationId 唯一性:全局不重复,推荐
动词+名词格式 - summary 简洁性:控制在 60 字符以内,能独立描述操作目的
- description 完整性:包含业务规则、前置条件、错误场景说明
- deprecated 迁移指引:废弃操作必须注明替代方案和移除时间
- 方法语义正确:GET 无请求体,POST 非幂等,PUT/DELETE 幂等
- 参数层级:路径级别参数用于公共参数,操作级别参数用于方法特有参数
自动化检查:使用
spectral 或 redocly-cli 配置规则集,自动校验 operationId 唯一性、deprecated 标记的 description 完整性、路径命名规范等,集成到 CI/CD 流水线中。