AI 辅助 API 设计:从契约到文档

API 设计的好坏,往往在第一个调用方接入时才暴露:路径不一致、错误格式各写一套、版本一升级就全链路报错。与其等联调阶段返工,不如把”契约先行”做扎实,并用 AI 把重复劳动从资源建模一路推进到文档与 SDK。本文给出可落地的决策清单、可复制的提示词,以及一份贯穿全流程的工具视角。

API 设计的关键决策

在让 AI 动手之前,先要把四类决策想清楚。AI 擅长”按规矩填空”,但规矩本身需要人来定。

资源建模

先把领域拆成名词性的”资源”,而不是动作。一个订单系统里,资源是 ordersorder-itemscustomers,而不是 createOrdergetOrderList。用资源做主语,接口才具备可组合性:对同一个资源可以挂不同的 HTTP 方法,前端也能用统一的缓存与失效策略。

给 AI 的提示词可以这样写:

我有一个电商后台,核心实体有:用户、购物车、订单、商品、优惠券。
请把它建模成 RESTful 资源,列出每个资源的字段与相互引用关系,
输出成资源清单(资源名 / 关键字段 / 与其他资源的关系)。
不要写具体接口,只做建模。

路径命名

路径命名要稳定、可预测、不暴露实现。几条经验法则:

  • 用复数名词表示集合:/orders 而非 /order
  • 层级表达从属关系:/customers/{id}/orders
  • 用连字符而非下划线或驼峰:/order-items 优于 /orderItems
  • 不在路径里塞动词,动作交给 HTTP 方法表达。

路径一旦发布就几乎不可改,所以这一步值得和 AI 多轮推敲,再人工拍板。

状态码

状态码是 API 的”第一句回应”,必须语义正确。常见约定:

场景状态码
创建成功201 Created
异步受理202 Accepted
请求格式错误400 Bad Request
未认证401 Unauthorized
无权限403 Forbidden
资源不存在404 Not Found
幂等冲突409 Conflict
服务端错误500 Internal Server Error

要求 AI 在生成契约时,每个响应都显式声明状态码与对应 schema,而不是只写 200。

版本管理

版本放哪里,团队常有分歧。主流做法是放在路径前缀(/v1/orders),对网关友好、易于观测;也可以放在请求头,但对调试不友好。无论选哪种,关键是”新增不破旧”:新增字段可向后兼容,破坏性变更必须升版本。让 AI 在评审阶段专门检查”本次改动是否破坏 v1 兼容性”。

用 AI 生成 OpenAPI/Swagger 契约与示例

契约是后续一切(文档、SDK、测试桩)的源头。把前面定好的决策喂给 AI,让它产出 OpenAPI 描述文件。

提示词思路:先给资源建模结果,再要求输出符合 OpenAPI 3.x 的 YAML,明确每个操作的 operationId、请求体、成功与错误响应、以及至少一个示例。下面是一份”最小但可用”的 YAML 示例:

  # OpenAPI 3.1 最小契约:订单创建接口
  openapi: 3.1.0
  info:
    title: 订单服务
    version: 1.0.0
  paths:
    /orders:
      post:
        # 创建订单,要求客户端下发幂等键
        operationId: createOrder
        summary: 创建一笔订单
        requestBody:
          required: true
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OrderCreate"
        responses:
          "201":
            description: 订单创建成功
            content:
              application/json:
                schema:
                  $ref: "#/components/schemas/Order"
          "400":
            description: 请求参数错误
            content:
              application/json:
                schema:
                  $ref: "#/components/schemas/Error"
  components:
    schemas:
      OrderCreate:
        type: object
        required: [customer_id, items]
        properties:
          customer_id:
            type: string
          items:
            type: array
            items:
              type: object
              required: [sku, quantity]
              properties:
                sku:
                  type: string
                quantity:
                  type: integer
                  minimum: 1
      Order:
        type: object
        required: [id, status]
        properties:
          id:
            type: string
          status:
            type: string
            enum: [pending, paid, shipped, done]
      Error:
        type: object
        required: [code, message]
        properties:
          code:
            type: string
          message:
            type: string
          request_id:
            type: string

拿到这份契约后,建议让 AI 再补 2 到 3 个示例响应(正常、缺字段、越权),示例越真实,下游 SDK 与文档越贴近实际。

用 AI 生成一致的前端 SDK 与测试桩

契约写定,AI 就能基于它产出”与后端同源”的前端 SDK 和测试桩,避免前端手敲类型、各端各写一套。

生成 SDK

最直接的路径是用代码生成器吃下 OpenAPI 文件。开源的 OpenAPI Generator 支持数十种语言(TypeScript、Python、Go、Java 等),商业平台如 Stainless 则强调”地道、接近手写的 SDK”并支持持续随契约再生。给 AI 的提示词:

基于 openapi.yaml,生成 TypeScript SDK:要求导出 OrdersClient,
每个方法对应一个 operationId,入参类型来自 requestBody schema,
返回类型来自 2xx 响应 schema,错误统一抛 ApiError。
给出安装与最小调用示例。

生成测试桩

测试桩用来在后端还没就绪时,让前端和集成测试先跑起来。两种思路:

  • Mock 服务:用 Prism 等工具直接按契约起一个假服务,返回示例响应。
  • 调用封装:让 AI 生成带类型与默认参数的客户端封装,测试里注入假响应。

下面是一段由契约推导出的 Python 客户端封装(同时也充当调用方的测试桩):

  # 由 OpenAPI 契约生成的订单客户端封装(测试时可注入假响应)
  import requests

  class OrdersClient:
      def __init__(self, base_url, api_key):
          self.base_url = base_url.rstrip("/")
          self.headers = {"Authorization": f"Bearer {api_key}"}

      def create_order(self, payload, idempotency_key):
          # 幂等键随请求头下发,重试同一条请求安全
          headers = {**self.headers, "Idempotency-Key": idempotency_key}
          resp = requests.post(
              f"{self.base_url}/orders", json=payload, headers=headers, timeout=10
          )
          return resp

统一错误响应的结构建议写进契约并让 SDK 复用,下面是一个推荐的 JSON 形态:

{
  "error": {
    "code": "order_not_found",
    "message": "订单不存在或当前用户无权访问",
    "request_id": "req_8f2c1a73",
    "details": []
  }
}

用 AI 做评审:幂等、鉴权、错误规范

契约不是写完就完,交给 AI 做一轮”契约评审”,能在联调前堵住大量坑。把契约文件贴给 AI,并明确要求从三个维度检查。

幂等:写操作(POST 创建类)是否支持重试安全?是否定义了幂等键(如 Idempotency-Key)或基于业务唯一键的去重?没有幂等的创建接口在弱网重试时会重复下单。

鉴权:每个非公开操作是否声明了安全方案(securitySchemes)?令牌放在哪里、如何刷新、401 与 403 的边界是否清晰?

错误规范:所有错误响应是否共用同一结构(上面的 error 对象)?状态码与 code 是否一一对应、是否可被程序识别(不用自然语言去分支)?

可复制的评审提示词:

请评审以下 OpenAPI 契约(粘贴内容)。只聚焦三类问题:
1. 幂等:写操作是否可安全重试,是否定义幂等键或去重键。
2. 鉴权:每个操作是否声明安全方案,401/403 边界是否清楚。
3. 错误规范:错误响应是否结构统一、code 可程序化判断。
逐条给出:位置(路径/操作)、问题、为什么、建议改法。

工具链:Postman AI / Copilot / 各类 API 平台

下面仅描述能力定位,不替你做选型。

  • Postman AI(Postbot):Postman 内的 AI 助手,可基于你正在调试的请求自动补测试脚本、写接口文档、解释报错与可视化响应。适合”在 Postman 工作流里顺手把文档和测试补齐”。(能力描述,官方文档已核验)

  • GitHub Copilot:编辑器内的 AI 结对编程,能根据上下文补全接口代码、生成单元测试、把自然语言需求转成路由与处理函数。它并不直接产出 OpenAPI 文件,但能大幅加速”按契约写实现”的过程。(通用能力,具体特性以官方文档为准,待核实)

  • Stainless:以 OpenAPI 契约为输入,生成”接近手写”的多语言 SDK、同步文档与面向 Agent 的 MCP 服务,并在契约变化时持续再生。(官方文档已核验)

  • OpenAPI Generator:开源代码生成器,吃下 OpenAPI 文件后产出客户端 SDK、服务端桩与文档,覆盖数十种语言与框架。(开源仓库已核验)

  • Prism / Spectral:Prism 按契约起 Mock 服务;Spectral 对契约做规则化校验(命名、必填、描述完整度)。二者是把”契约纪律”落到 CI 的常用搭配。(能力描述,待核实)

小结

  1. 先把资源建模、路径命名、状态码、版本管理四类决策定下来,AI 负责按规矩填空,规矩由人拍板。
  2. 用结构化的提示词让 AI 产出 OpenAPI 契约,每个响应都显式声明状态码、schema 与示例。
  3. 同一份契约驱动 SDK 与测试桩生成,保证前后端类型与行为同源、不 drift。
  4. 把契约交给 AI 做”幂等、鉴权、错误规范”三轮评审,能在联调前堵住大部分坑。
  5. 工具分层:Postman AI 补文档测试、Copilot 加速实现、Stainless/OpenAPI Generator 出 SDK、Prism/Spectral 守契约纪律。
  6. AI 产出的是”草稿与检查清单”,最终契约的兼容性与安全责任仍在人手里。

参考与延伸阅读

  1. OpenAPI Initiative,《OpenAPI Specification》(最新 3.2.0,定义与语言无关的 HTTP API 接口描述,作为机器可读契约):https://spec.openapis.org/oas/latest.html —— 已核验
  2. Postman,《About Postbot》(Postman 内 AI 助手:补测试、写文档、解释报错、可视化响应):https://learning.postman.com/v11/docs/getting-started/basics/about-postbot —— 已核验
  3. Stainless,《Studio quickstart》(以 OpenAPI 契约为输入生成多语言 SDK、文档与 MCP 服务):https://www.stainless.com/docs/quickstart-studio —— 已核验
  4. OpenAPITools,《openapi-generator》(开源生成器,吃 OpenAPI 产出客户端/服务端桩/文档):https://github.com/openapitools/openapi-generator —— 已核验
  5. GitHub,《GitHub Copilot documentation》(编辑器内 AI 结对编程,补全代码与测试):https://docs.github.com/en/copilot —— 待核实(仅抓取概览,具体特性以官方更新为准)
  6. Stoplight,《Spectral》(契约规则化校验工具,配合 Prism 做 Mock):https://meta.stoplight.io/docs/spectral —— 待核实
本文累计阅读