概览
前端 API 代码生成工具可以从后端的 OpenAPI/Swagger 文档或 Protocol Buffers 定义自动 生成 TypeScript 类型定义和 API 客户端代码,提高开发效率并确保前后端接口定义的一致性。
工具分类
HTTP REST API 生成工具
| 工具 | 生成内容 | 代码量 | 文件组织 | 维护状态 | 适用场景 |
|---|---|---|---|---|---|
| OpenAPI Generator | 完整客户端 + 类型 | 较重 | 按 models/apis 分离(按 schema 分割) | 活跃维护 | 需要完整 API 封装 |
| openapi-typescript | 仅类型定义 | 轻量 | 单文件 | 活跃维护 | 自行封装 API 调用 |
| @hey-api/openapi-ts | 类型 + 可选服务 | 中等 | 单文件(types.gen.ts) | 活跃维护 | 需要灵活配置,自行封装 API |
| swagger-typescript-api | 类型 + 可选服务 | 中等 | 按 tags 多文件(api/ + data-contracts/) | 活跃维护 | 需要按 tags 分割,自行封装 API |
gRPC 生成工具
| 工具 | 生成内容 | 文件组织 | 维护状态 | 适用场景 |
|---|---|---|---|---|
| protoc-gen-ts_proto | 类型定义 | 每个 proto 一个文件 | 活跃维护 | gRPC 接口 |
工具对比
OpenAPI Generator
优势:
- 功能强大,支持多种语言和框架
- 生成完整的 API 客户端代码,开箱即用
- 支持 Swagger 2.0 和 OpenAPI 3.x
- 社区活跃,文档完善
劣势:
- 生成的代码量较大
- 需要 Java 运行环境(可通过 Docker 解决)
- 配置参数较多
适用场景:
- 需要完整的 API 封装,不想手动编写 API 调用代码
- 企业级项目,需要稳定的工具支持
- 多语言项目,需要统一代码生成方案
openapi-typescript
优势:
- 极轻量,只生成类型定义
- 生成的代码不依赖任何运行时库
- 配置简单,使用方便
- 支持 OpenAPI 3.x(v6.x)
劣势:
- 仅支持 OpenAPI 3.x,Swagger 2.0 需要先转换
- 生成单文件,大型项目可能文件较 大
- 需要自行封装 API 调用逻辑
适用场景:
- 只需要类型定义,自行封装 API 调用
- 项目已有完善的 API 封装层
- 希望最小化生成代码的体积
@hey-api/openapi-ts
优势:
- 可以只生成类型,也可以生成服务代码
- 支持 Swagger 2.0(通过转换)
- 活跃维护,是 openapi-typescript-codegen 的替代
- 配置灵活,支持多种生成选项
劣势:
- 不支持按 tags 分割:所有类型定义生成在单个文件中
- 相对较新,社区规模较小
- 配置选项不如 OpenAPI Generator 丰富
适用场景:
- 只需要类型定义,接受单个文件
- 需要轻量级工具,自行封装 API
- 希望灵活的配置选项
swagger-typescript-api
优势:
- 支持按 tags 分割:按 OpenAPI tags 自动分割生成多个文件
- 专为 TypeScript 设计,对前端开发友好
- 支持 Swagger 2.0,无需转换
- 可以只生成类型,也可以生成 API 客户端代码
劣势:
- 相对较新,社区规模较小
- 配置选项不如 OpenAPI Generator 丰富
适用场景:
- 需要按 tags 分割生成多个文件
- 希望生成轻量级的类型定义和 API 封装
- 需要灵活的配置选项
protoc-gen-ts_proto
优势:
- 每个 proto 文件对应一个 TypeScript 文件,组织清晰
- 支持完整的 Protocol Buffers 特性
- 类型定义精确,性能优化
劣势:
- 仅适用于 gRPC 接口
- 需要 Protocol Buffers 定义文件
适用场景:
- 后端使用 gRPC 提供服务
- 需要精确的类型定义和性能优化
选择建议
按需求选择
-
需要完整 API 封装 → OpenAPI Generator
- 生成即用的 API 客户端
- 适合快速开发,减少手动编码
-
只需要类型定义 → openapi-typescript
- 极轻量,自行封装 API
- 适合已有完善封装层的项目
-
需要按 tags 分割 → swagger-typescript-api
- 按 OpenAPI tags 分割生成多个文件
- 适合需要按业务模块组织代码的项目
- 支持
--modular或--module-first选项
-
需要按 schema 分割 → openapi-generator-cli
- 按 schema 分割到
models/目录 - 适合需要按数据模型组织类型的项目
- 注意:OpenAPI Generator 按 schema 分割,不是按 tags
- 按 schema 分割到
-
gRPC 接口 → protoc-gen-ts_proto
- 标准的 gRPC TypeScript 生成工具
- 适合微服务架构
按项目规模选择
- 小型项目:openapi-typescript(轻量,单文件即可)
- 中型项目:@hey-api/openapi-ts(多文件,便于维护)
- 大型/企业项目:OpenAPI Generator(功能完整,稳定可靠)
按技术栈选择
- HTTP REST API:OpenAPI Generator / openapi-typescript / @hey-api/openapi-ts
- gRPC:protoc-gen-ts_proto
工作流程
通用流程
-
后端生成 API 文档
- HTTP API:使用
swaggo/swag生成 Swagger/OpenAPI 文档 - gRPC:使用
protoc编译.proto文件
- HTTP API:使用
-
选择生成工具
- 根据项目需求选择合适的工具
-
配置生成参数
- 创建配置文件或使用命令行参数
-
执行代码生成
- 通过 Makefile 或 npm script 执行生成命令
-
前端集成
- 复制生成的代码到前端项目
- 配置 API 客户端实例
- 在组件或 Store 中使用
最佳实践
- 后端驱动:生成逻辑放在后端代码库,前端只需复制生成的代码
- Docker 容器化:使用 Docker 运行生成工具,避免本地环境依赖
- 版本控制:生成的代码可以提交到 Git,便于版本管理
- 自动化集成:将生成流程集成到 CI/CD,确保接口变更时自动更新