API 101 专栏 · 第 13

理解 API 的 OpenAPI 规范

2025年04月02日
理解 API 的 OpenAPI 规范

引言:API 标准化的需求

在当今互联互通的数字环境中,API(应用程序编程接口)已成为现代软件开发的核心骨干。在云计算、微服务和分布式系统的驱动下,API 经济在近年来迎来了爆炸式增长。

然而,这种快速增长也暴露出了重大挑战。如果没有标准化的 API 描述,团队将面临文档碎片化、工具不一致以及协作瓶颈等问题。开发人员经常花费数小时来理解缺乏文档说明的端点,测试人员难以验证 API 的行为,而产品经理则对 API 的功能缺乏可见性。这种标准化的缺失拖慢了开发周期,并增加了维护成本。

OpenAPI 规范 (OAS) 应运而生,这是一种用于描述 API 的行业标准格式。OpenAPI 提供了一种机器可读且对人类友好的 API 行为蓝图,从而弥合了开发人员、测试人员和产品经理之间的鸿沟。通过标准化 API 描述,OpenAPI 实现了整个 API 生命周期的自动化、一致性和协作。

OpenAPI 的演进:从 Swagger 到行业标准

Swagger 的起源

OpenAPI 的旅程始于 2011 年的 Swagger,这是一个由 Wordnik(后来的 SmartBear Software)创建的开源工具,旨在简化 API 开发。Swagger 引入了一种用于记录 RESTful API 的规范,由于其简单性以及与开发人员工作流的良好集成,该规范被广泛采用。

2014 年,Swagger 的规范被捐赠给 OpenAPI Initiative (OAI),这是一个由谷歌、微软和 IBM 等行业巨头支持的 Linux 基金会项目。这标志着 OpenAPI 2.0 的诞生,它标准化了 Swagger 规范,并为现代 API 文档奠定了基础。

关键里程碑

  • OpenAPI 2.0 (2014):引入了用于 API 端点的结构化 paths,用于 API 位置的 hostbasePath,以及基本的安全定义。该版本成为了 API 文档的事实标准。

  • OpenAPI 3.0 (2017):一次重大飞跃,增强了安全性(OAuth2、OpenID Connect),引入了可重用组件(schemas、parameters、security schemes),并提供了更好的可扩展性。该版本支持了代码生成和自动化测试等高级工具。

  • OpenAPI 3.1 (2021):实现了与 JSON Schema Draft-07 的完全兼容,允许开发人员直接在 OpenAPI 文档中利用 JSON Schema 丰富的验证功能。

采用的驱动力

OpenAPI 的快速普及得益于主要科技巨头和开源社区的支持。Swagger UI、Postman 和 API 网关等工具原生集成了 OpenAPI,使其成为了 API 开发的通用语言。根据 APIs You Won't Hate 播客 的数据,超过 90% 的财富 500 强公司现在都在使用 OpenAPI 来管理其 API 生态系统。

OpenAPI 文档的核心组件

OpenAPI 文档的结构旨在描述 API 的各个方面,从元数据到安全要求。以下是其核心组件的细分:

结构细分

  1. 元数据 (Metadata)

    • info:包含 API 标题、版本、联系方式和许可证信息。
    • servers:定义 API 端点(例如,https://api.example.com/v1)。
    • externalDocs:链接到外部文档(例如,GitHub 仓库)。
  2. API 端点 (API Endpoints)

    • paths:使用 HTTP 方法(GET、POST、PUT、DELETE)描述 API 路由。
    • parameters:指定查询 (query)、路径 (path)、标头 (header) 或 Cookie 参数。
    • path templating:使用像 /users/{id} 这样的占位符来实现动态端点。
  3. 数据模型 (Data Models)

    • schemas:使用 JSON Schema 定义请求/响应结构。

    • 示例:

      1type: array
      2items:
      3  type: string
      4  format: date-time
  4. 安全 (Security)

    • securitySchemes:定义身份验证方法(OAuth2、API 密钥、JWT)。
    • security:将全局安全要求应用于 API。

示例代码片段

以下是一个针对“宠物商店 (Petstore)” API 的极简 OpenAPI 3.0 YAML 代码片段:

1openapi: 3.0.0
2info:
3  title: Petstore API
4  version: 1.0.0
5  description: API for managing pets
6servers:
7  - url: https://api.petstore.com/v1
8paths:
9  /pets:
10    get:
11      summary: List all pets
12      responses:
13        '200':
14          description: A list of pets
15          content:
16            application/json:
17              schema:
18                type: array
19                items:
20                  $ref: '#/components/schemas/Pet'
21components:
22  schemas:
23    Pet:
24      type: object
25      properties:
26        id:
27          type: integer
28        name:
29          type: string
30        status:
31          type: string
32          enum: [available, pending, sold]

采用 OpenAPI 的优势

开发工作流的改进

  1. 代码生成

    Swagger Codegen 和 OpenAPI Generator 等工具可以自动生成 Python、JavaScript 和 Java 等语言的服务器存根 (server stubs) 和客户端 SDK。这为开发人员节省了数周的手动编码时间,并确保了实现的一致性。

  2. 自动化测试

    OpenAPI 使得 Pact 和 Postman 等契约测试工具能够根据规范验证 API 行为。根据 SmartBear 2023 年 API 调查,使用 OpenAPI 的团队报告称 API 相关的错误减少了 40%。

一致性与协作

  1. 单一事实来源 (Single Source of Truth)

    OpenAPI 文档作为 API 行为的权威参考,减少了文档和实现之间的差异。这对于大型团队来说至关重要,因为在大型团队中,沟通不畅可能导致成本高昂的返工。

  2. 工具生态系统

    OpenAPI 与 Postman(用于测试)、Swagger UI(用于文档)和 API 网关(例如用于流量管理的 API7.ai)等工具无缝集成。这个生态系统加速了开发并减少了切换工具带来的摩擦。

业务影响

采用 OpenAPI 可以加快新开发人员的入职速度,降低维护成本,并实现可扩展的 API 治理。Netflix 和 Amazon 等公司使用 OpenAPI 来管理数千个 API,从而确保其庞大生态系统的一致性。

OpenAPI 实践:工具与生态系统

设计与文档

  • 编辑器

    • Swagger Editor:一个基于浏览器并具有实时验证功能的编辑器。
    • Apicurio Studio:一个用于可视化设计 API 的协作式低代码编辑器。
  • 可视化

    • Swagger UI:从 OpenAPI 规范生成交互式 API 文档。
    • Redoc:Swagger UI 的一个轻量级且对开发者友好的替代方案。

开发与测试

  • Mock 服务器

    • API Sprout:为前端开发模拟 API 行为。
    • Postman Mock Servers:在测试期间验证 API 契约。
  • 验证器 (Validators)

    • Spectral:对 OpenAPI 规范进行 Lint 检查以确保其遵循最佳实践。
    • Swagger Parser:针对 OpenAPI schema 验证规范。

API 网关

API 网关利用 OpenAPI 进行流量管理、安全防护和数据分析。通过导入 OpenAPI 规范,API 网关可以自动配置速率限制、身份验证和日志记录,从而确保一致的 API 治理。

编写高效 OpenAPI 规范的最佳实践

模块化

使用 $ref 关键字将大型规范拆分为可重用组件。例如:

1components:
2  schemas:
3    User:
4      $ref: ./schemas/user.yaml

这不仅提高了可维护性,还减少了重复。

描述性元数据

包含详细的描述和示例以提高清晰度:

1paths:
2  /users/{id}:
3    get:
4      summary: Get user by ID
5      description: Returns a user based on the provided ID. Use this endpoint to fetch user details.
6      parameters:
7        - name: id
8          in: path
9          required: true
10          description: The user ID
11          schema:
12            type: string

版本控制

采用语义化版本控制(例如,v1v2)来管理向后兼容性:

1servers:
2  - url: https://api.example.com/{basePath}
3    variables:
4      basePath:
5        default: /v1

安全优先

提前定义安全要求:

1components:
2  securitySchemes:
3    bearerAuth:
4      type: http
5      scheme: bearer
6      bearerFormat: JWT
7security:
8  - bearerAuth: []

验证

使用 Swagger CLIStoplight Studio 等工具测试规范,以便尽早发现错误。

OpenAPI 的未来

新兴趋势

  1. gRPC 和 GraphQL 集成

    OpenAPI 正在超越 REST,扩展对 gRPCGraphQL 的支持,从而为 RPC 和基于查询的 API 实现标准化描述。

  2. 机器可读的治理

    SpecsGPT 这样的人工智能驱动工具正在涌现,以自动化 API Lint 检查和策略执行,确保规范符合组织标准。

  3. AsyncAPI 的标准化

    AsyncAPI 倡议旨在将类似于 OpenAPI 的标准化引入事件驱动型 API(例如 Kafka、MQTT)。

社区贡献

开发人员可以通过加入 OpenAPI Initiative 或参与 GitHub 上的讨论来为 OpenAPI 的发展做出贡献。即将发布的 OpenAPI 4.0 承诺提供更丰富的 JSON Schema 集成并支持新兴的 API 范式。

结论:为什么 OpenAPI 对 API 网关用户很重要

OpenAPI 不仅仅是一个文档工具——它是可扩展 API 管理的基础。通过采用 OpenAPI,用户可以:

  • 生成一致的文档和客户端 SDK。
  • 自动化测试和验证。
  • 与 API 网关无缝集成,以实现流量管理和安全性。

微信咨询

获取方案