用 AI 实现你的 OpenAPI
Posted on Mon 27 October 2025 in Journal
| Abstract | 用 AI 实现你的 OpenAPI |
|---|---|
| Authors | Walter Fan |
| Category | learning note |
| Status | v1.0 |
| Updated | 2025-10-27 |
| License | CC-BY-NC-ND 4.0 |
用 OpenAPI 来定义你的 API
关键词:OpenAPI、Swagger、API 文档、活文档、文档驱动编程、AI 辅助编程
一、OpenAPI 是什么?
一句话概括:
OpenAPI 是用来描述 RESTful API 的标准格式。
它不是一个框架,也不是一个库, 而是一个文档规范(Specification)—— 类似于接口的“蓝图”或“契约(Contract)”。
就像 C/C++ 里的头文件 .h,或者 Java 里的接口 interface,
OpenAPI 描述了:
- API 提供哪些路径(endpoints)
- 每个路径支持哪些 HTTP 方法(GET、POST、PUT、DELETE)
- 参数、请求体、返回值长什么样
- 返回码、错误格式等
让 人 和 机器 都能理解你的接口。
二、一个简单例子
比如你有个用户服务:
GET /api/users/{id}
返回用户信息。
你可以用 OpenAPI(YAML 格式)这样描述它:
openapi: 3.0.3
info:
title: 用户服务 API
version: 1.0.0
paths:
/api/users/{id}:
get:
summary: 获取指定用户信息
parameters:
- name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 成功返回用户信息
content:
application/json:
schema:
$ref: '#/components/schemas/User'
components:
schemas:
User:
type: object
properties:
id:
type: integer
name:
type: string
email:
type: string
这就是一份合法的 OpenAPI 文档。
三、它能做什么?
这份文档不是摆设。 有了它,你可以做很多事:
| 用途 | 说明 |
|---|---|
| ✅ 生成 API 文档 | 自动生成漂亮的网页文档(Swagger UI、Redoc) |
| ✅ 生成客户端 SDK | 一键生成 Java、Go、Python、TypeScript 的 API 调用代码 |
| ✅ 生成服务端骨架 | 一键生成控制器、路由模板 |
| ✅ 校验请求/响应 | 自动验证参数、类型、格式是否符合定义 |
| ✅ Mock 服务 | 没有后端也能跑接口联调测试 |
这就是为什么很多团队在 CI/CD 里都加上了 OpenAPI 检查: 接口变更前先改 OpenAPI 文件,再生成代码或文档。
四、和 Swagger 的关系
很多人一开始以为 “Swagger = OpenAPI”,其实:
| 名称 | 作用 |
|---|---|
| OpenAPI Specification (OAS) | 规范标准(由 Linux Foundation 管理) |
| Swagger | 一系列基于 OpenAPI 的工具(由 SmartBear 公司维护) |
| Swagger UI / Editor / Codegen | 实现 OpenAPI 的可视化与代码生成工具 |
所以:
- 规范:OpenAPI
- 工具:Swagger
五、语言生态(针对你熟悉的几门语言)
| 语言 | 常见框架 | OpenAPI 工具 |
|---|---|---|
| Java | Spring Boot | Springdoc OpenAPI(推荐)、Swagger-Core |
| Go | Gin / Echo / Fiber | swaggo/swag、go-openapi、oapi-codegen |
| Python | FastAPI、Flask | FastAPI 原生支持、flasgger |
| C++ | Pistache、Restbed | OpenAPI Generator 生成代码骨架 |
举个 Java 的例子:
@RestController
@RequestMapping("/api/users")
@Tag(name = "用户管理")
public class UserController {
@Operation(summary = "根据ID获取用户信息")
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return new User(id, "Alice", "alice@example.com");
}
}
配合 springdoc-openapi,你可以自动生成:
/v3/api-docs(JSON 格式)/swagger-ui.html(网页文档)
六、版本与演进
| 版本 | 时间 | 特点 |
|---|---|---|
| OpenAPI 2.0 | 以前叫 Swagger 2.0 | JSON/YAML 支持 |
| OpenAPI 3.0 | 主流版本 | 增强请求体定义 |
| OpenAPI 3.1 | 最新 | 完全支持 JSON Schema 2020-12 |
建议现在用 3.0+。
七、OpenAPI 与活文档(Living Documentation)
什么是活文档?
传统 API 文档最大的问题是什么?容易过时。
今天改了接口,明天忘记更新文档;文档和代码不一致,导致前后端对接时频频出错。这是很多团队的痛点。
活文档(Living Documentation) 的理念是:让文档成为代码的一部分,随代码自动更新。
OpenAPI 如何实现活文档?
OpenAPI 通过以下方式实现活文档:
1. 代码即文档(Code as Documentation)
通过注解或装饰器,让文档定义直接写在代码里:
@Operation(summary = "创建用户", description = "创建一个新用户账户")
@PostMapping("/users")
public ResponseEntity<User> createUser(
@RequestBody @Valid UserCreateRequest request
) {
// 实现代码
}
当代码变更时,OpenAPI 文档自动更新。
2. 文档驱动开发(Documentation-Driven Development)
另一种方式是先写文档,再写代码:
- 在
openapi.yaml中定义接口规范 - 使用工具生成服务端骨架代码
- 实现业务逻辑
- 运行时验证请求/响应是否符合文档
这样文档永远是"最新版本",因为它就是唯一的真实来源(Single Source of Truth)。
3. 持续验证
在 CI/CD 流程中加入文档校验:
# .github/workflows/api-docs.yml
- name: Validate OpenAPI
run: |
npx @stoplight/spectral-cli lint openapi.yaml
- name: Generate SDK
run: |
openapi-generator generate -i openapi.yaml -g typescript-axios
- name: Test against spec
run: |
npm run test:api-contract
每次代码提交,都会验证文档与实现的一致性。
活文档的价值
| 传统文档 | 活文档 |
|---|---|
| 手动维护,容易过时 | 自动生成,始终同步 |
| 静态 HTML/PDF,无法交互 | 交互式 UI,可直接测试接口 |
| 仅面向人类阅读 | 机器可读,可生成代码、进行验证 |
| 需要额外工具链 | 集成在开发流程中 |
活文档让文档从"负担"变成"资产"。
八、文档驱动编程与 AI 辅助编程
文档驱动编程的核心思想
文档驱动编程(Documentation-Driven Development, DDD) 的核心是:
文档不是开发的副产品,而是开发的起点和契约。
先定义"做什么"(What),再实现"怎么做"(How)。
这与契约驱动开发(Contract-Driven Development) 一脉相承:
OpenAPI 文档 = API 契约
↓
代码实现 = 契约的实现
↓
自动验证 = 确保实现符合契约
AI 辅助编程时代的机遇
在 AI 辅助编程(如 GitHub Copilot、Cursor、Claude 等)的时代,结构化文档的价值被放大:
1. AI 能够理解 OpenAPI 规范
现代 AI 模型经过大量代码和文档训练,对 OpenAPI 规范非常熟悉。当你提供 OpenAPI 文档时,AI 可以:
场景一:根据文档生成代码
你:根据这个 OpenAPI 文档,生成 Spring Boot Controller
AI:分析 openapi.yaml → 生成完整的 Controller 代码
# openapi.yaml
paths:
/api/users/{id}:
get:
summary: 获取用户信息
parameters:
- name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 成功
content:
application/json:
schema:
$ref: '#/components/schemas/User'
AI 可以据此生成:
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Integer id) {
// AI 生成的代码骨架
}
}
场景二:根据文档生成测试用例
你:为这个 API 生成完整的测试用例
AI:分析文档 → 生成单元测试、集成测试、契约测试
场景三:文档补全与优化
你:检查这个 OpenAPI 文档是否完整,补充缺失的部分
AI:分析现有文档 → 发现缺失字段 → 提供建议和补全
2. AI 作为"文档翻译器"
AI 可以在不同抽象层次之间转换:
自然语言需求
↓ (AI 理解)
OpenAPI 文档
↓ (AI 生成)
代码实现
↓ (AI 验证)
测试用例
实际工作流示例:
开发者:我需要一个用户注册接口,接收邮箱和密码,返回用户ID和token
AI(分析需求):
→ 生成 OpenAPI 文档片段
→ 生成 Controller 代码
→ 生成 Service 层代码
→ 生成 DTO 类
→ 生成测试用例
→ 生成 API 文档页面
3. AI 辅助的文档审查
AI 可以帮助审查 OpenAPI 文档的质量:
- 一致性检查:字段命名是否统一?状态码使用是否规范?
- 完整性检查:是否所有端点都有描述?错误响应是否定义?
- 最佳实践:是否符合 RESTful 设计原则?版本控制是否合理?
实践建议:构建 AI 友好的 API 文档
要让 AI 更好地理解和使用你的 OpenAPI 文档,建议:
✅ 1. 添加详细的描述
paths:
/api/users/{id}:
get:
summary: 获取用户信息
description: |
根据用户ID获取用户详细信息。
如果用户不存在,返回 404。
需要 Bearer Token 认证。
operationId: getUserById # 给 AI 一个明确的标识
✅ 2. 使用示例(Examples)
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/User'
examples:
success:
value:
id: 1
name: "Alice"
email: "alice@example.com"
示例让 AI 更好地理解数据结构。
✅ 3. 明确的错误定义
responses:
'400':
description: 请求参数错误
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: 用户不存在
'500':
description: 服务器内部错误
✅ 4. 使用语义化的 schema 名称
components:
schemas:
User: # ✅ 好:语义清晰
type: object
UserResponse: # ✅ 好:明确是响应对象
UserCreateRequest: # ✅ 好:明确是请求对象
而不是:
components:
schemas:
User1: # ❌ 差:无意义
Data: # ❌ 差:太泛化
AI 辅助编程的未来展望
随着 AI 能力的提升,文档驱动编程 + AI 辅助编程的组合将会:
- 降低 API 设计门槛:非技术人员也能通过自然语言描述生成 API 文档
- 加速开发迭代:从文档到代码的转换时间大幅缩短
- 提升代码质量:AI 根据文档生成代码,天然保证接口一致性
- 自动化测试生成:AI 根据 OpenAPI 文档自动生成全面的测试用例
九、实践建议(经验谈)
对老程序员来说,最重要的不是学语法,而是掌握 使用流程:
- 先定义 OpenAPI 文档(可手写或用 Swagger Editor,或让 AI 帮你生成)
- 让后端代码实现它(生成接口骨架或校验,或让 AI 根据文档生成代码)
- 让前端或测试通过文档调用(生成 SDK 或 Mock 服务)
- 持续集成里验证文档是否同步(自动化检查)
在 AI 时代,这个流程更加顺畅:
需求 → AI 生成 OpenAPI 文档 → AI 生成代码骨架 → 人工实现业务逻辑 → AI 生成测试 → 自动化验证
长期坚持下来,你的项目会非常规范:
- 接口变更有据可查
- 前后端解耦
- SDK、测试、Mock 一键生成
- AI 辅助开发效率大幅提升
十、小结
OpenAPI = Web 接口的"IDL"(接口定义语言)。 它让 REST API 变得像 gRPC、Thrift 一样可描述、可生成、可验证。
更重要的是,在 AI 辅助编程的时代:
OpenAPI + 活文档 + AI = 高效的 API 开发范式
文档不仅是给人看的,更是给机器(包括 AI)读的。 一份好的 OpenAPI 文档,是 AI 理解你的接口、生成代码、进行测试的"知识图谱"。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。