API 101 专栏 · 第 72

Swagger:设计和文档化 API

2025年12月23日
Swagger:设计和文档化 API

在软件开发的世界里,API 是将我们的数字服务粘合在一起的胶水。但这种胶水可能会变得混乱。团队经常面临文档不完善、设计不一致或不断变化的 API 的混乱,导致开发周期缓慢和开发者沮丧。

这就是 SwaggerOpenAPI 规范 旨在解决的问题。它们提供了一个与语言无关的框架,用于描述、设计、记录和使用 RESTful API,为整个 API 生命周期带来秩序和效率。本指南将揭开这些工具的神秘面纱,并展示它们如何构成现代、设计优先的 API 策略的基础。

什么是 Swagger?澄清 OpenAPI 规范

首先,让我们澄清一个常见的困惑点。术语"Swagger"和"OpenAPI"经常互换使用,但它们指的是不同的东西。

  • OpenAPI 规范(OAS) 是规范本身。它是一个开放标准,定义了一种格式(以 YAMLJSON 表示),用于描述 RESTful API 的结构和功能。把它想象成你 API 的官方蓝图。
  • Swagger 是该规范的原始名称,现在指的是一套流行的开源和商业工具,它们被构建用于与 OpenAPI 规范一起工作。

因此,你使用 Swagger 工具来编写 OpenAPI 规范。这种基于契约的方法正是该生态系统如此强大的原因。

1graph TD
2    A[OpenAPI 规范] --> B{Swagger 工具};
3    B --> C[Swagger 编辑器];
4    B --> D[Swagger UI];
5    B --> E[Swagger Codegen];
6
7    style A fill:#e1f5fe
8    style C fill:#f3e5f5
9    style D fill:#e8f5e8
10    style E fill:#fff3e0

Swagger 工具包:API 设计的核心组件

Swagger 生态系统为 API 设计和文档过程的每个阶段提供了强大的工具。

  1. OpenAPI 规范(蓝图)

    其核心是规范文件。这个机器可读的文档是你 API 的单一事实来源。它精确定义了:

    • 所有可用的端点(paths)及其支持的 HTTP 方法(getpost 等)。
    • 每个操作的参数(路径、查询、请求头)。
    • 使用 schemas 定义请求和响应体的结构。
    • 认证方法(例如,API 密钥、OAuth2)。
  2. Swagger 编辑器(创作工具)

    Swagger 编辑器是一个基于浏览器的工具,用于编写和验证你的 OpenAPI 规范。当你输入 YAMLJSON 时,它会提供实时反馈,突出显示语法错误并确保你的规范是合规的。它还包括一个并排窗格,可以渲染 Swagger UI 文档外观的预览 swagger.io

  3. Swagger UI(交互式文档)

    这也许是最著名的 Swagger 工具。Swagger UI 接受一个 OpenAPI 规范并自动生成一个美观、交互式的 API 文档网页。用户不仅可以阅读每个端点,还可以展开它、填写参数并直接从浏览器进行实时 API 调用。对于 API 消费者和内部测试来说,它是一个宝贵的工具。

  4. Swagger Codegen(自动化引擎)

    这个工具展示了自动化的真正力量。通过向其提供你的 OpenAPI 规范,Swagger Codegen 可以生成数十种语言(Python、Java、JavaScript 等)的客户端 SDK 和服务器端存根。这意味着你可以创建一个完全文档化的 API,然后自动生成消费或实现它所需的样板代码。

采用"API 优先"的设计理念

Swagger 工具包是推动 API 优先 设计理念的引擎,这是一种从根本上改变开发工作流的现代方法。

1sequenceDiagram
2    participant Spec as API 规范
3    participant BE as 后端团队
4    participant FE as 前端团队
5
6    alt 传统方式(代码优先)
7        BE->>BE: 1. 编写后端代码
8        BE->>FE: 2. "API 准备好了!"
9        FE->>FE: 3. 尝试集成
10        BE->>BE: 4. 编写文档
11    else 现代方式(API 优先)
12        Spec->>Spec: 1. 设计和审查规范
13        Note right of Spec: 尽早收集反馈
14        Spec->>BE: 2. 实现 API
15        Spec->>FE: 2. 基于模拟构建
16    end

旧的"代码优先"方法意味着后端团队会先构建 API,而文档往往是一个事后考虑的问题,导致痛苦的集成过程。

API 优先方法 颠覆了这一过程:

  1. 优先设计: 团队协作在 OpenAPI 规范中定义 API。这就是契约。
  2. 获取反馈: 利益相关者可以在编写第一行实现代码之前在 Swagger UI 中审查设计。
  3. 并行工作: 有了契约,后端团队可以构建 API,前端团队可以基于从同一规范生成的模拟服务器进行构建。他们知道,如果双方都遵守契约,集成将无缝工作。
  4. 自动生成: 文档、测试和客户端 SDK 都从这个单一事实来源生成,确保一致性。

实践示例:使用 OpenAPI 3.0 定义用户 API

让我们看看一个简单的 OpenAPI 规范是什么样的。以下是一个基本用户 API 的 YAML 文件。

1# 使用 OpenAPI 规范版本 3.0.0
2openapi: 3.0.0
3
4# 关于 API 的基本元数据
5info:
6  title: 用户 API
7  version: 1.0.0
8  description: 一个简单的用于管理用户的 API
9
10# 定义 API 端点
11paths:
12  /users:
13    get:
14      summary: 获取所有用户
15      description: 返回所有用户的列表。
16      responses:
17        '200':
18          description: 用户 JSON 数组
19          content:
20            application/json:
21              schema:
22                type: array
23                items:
24                  $ref: '#/components/schemas/User' # 引用可重用模式
25    post:
26      summary: 创建新用户
27      description: 在系统中创建一个新用户。
28      requestBody:
29        required: true
30        content:
31          application/json:
32            schema:
33              $ref: '#/components/schemas/UserCreate' # 引用用于创建的不同模式
34      responses:
35        '201':
36          description: 用户创建成功
37
38# 定义可重用组件,如数据模型(模式)
39components:
40  schemas:
41    # API 返回的用户对象模式
42    User:
43      type: object
44      properties:
45        id:
46          type: string
47          description: 用户的唯一标识符。
48        name:
49          type: string
50        email:
51          type: string
52          format: email
53
54    # 创建新用户时的载荷模式(无 'id' 字段)
55    UserCreate:
56      type: object
57      required:
58        - name
59        - email
60      properties:
61        name:
62          type: string
63        email:
64          type: string
65          format: email

这个文件清楚地定义了两个操作(GET /usersPOST /users)以及它们使用的数据模型。这就是 Swagger UI 生成丰富、交互式文档所需的全部内容。

Swagger 和你的 API 网关:从设计到部署

OpenAPI 规范的力量不仅仅止于设计和文档。它是你生产环境中的一个关键工件,特别是当使用像 Apache APISIX 这样的现代 API 网关时。它们是完美匹配:你的规范定义了 API 契约,而网关强制执行它。

以下是它们的协同工作方式:

  1. 自动化的路由配置: 与其在网关中手动配置每个 API 路由,你可以简单地导入你的 openapi.yaml 文件。像 API7 Enterprise 这样的智能网关管理平台可以解析此文件,自动创建所有必要的路由,节省数小时的手动工作并消除人为错误。
  2. 请求验证: 你规范中的模式不仅仅用于文档。API 网关可以使用它们在边缘验证传入的请求。如果发送到 /usersPOST 请求缺少必需的 email 字段,网关可以立即以 400 Bad Request 拒绝它,然后它才到达你的后端服务。这提供了强大的安全层,并确保只有有效的流量才会命中你的应用程序。

OpenAPI 规范 成为驱动设计、文档、测试,乃至部署和运行时策略执行的单一事实来源。

结论:拥抱规范驱动的 API 生命周期

Swagger 和 OpenAPI 规范提供的不仅仅是文档;它们实现了规范、高效且协作的 API 开发方法。通过采用 API 优先的理念,团队可以构建设计更好、更一致且更可靠的 API。

当该规范被用作 整个 API 生命周期 中的中心工件时,真正的价值就会被释放。设计你的 API 是第一步。下一步是保护、管理和扩展它以应对现实世界。一个强大的 API 网关策略是实现这最后、关键阶段的钥匙。

微信咨询

获取方案