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 —— 布尔值标记,指示该操作是否已废弃,默认 false
  • parameters —— 操作级别的参数列表,覆盖路径级别的同名参数
  • 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 路径与操作结构图

路径与操作对象结构图 paths /users/{userId} (路径对象) GET (getUserById) POST (createUser) PUT (updateUser) DELETE (deleteUser) operationId summary description deprecated parameters requestBody responses security 路径与操作定义要点 • 路径对象是端点模板,操作对象是 HTTP 方法的具体描述 • operationId 全局唯一,用于代码生成和日志追踪 • deprecated 标记用于废弃管理,需在 description 中注明替代方案 • GET 安全幂等,POST 非幂等,PUT/DELETE 幂等

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 流水线中。