跳到主要内容

概览

前端 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 提供服务
  • 需要精确的类型定义和性能优化

选择建议

按需求选择

  1. 需要完整 API 封装 → OpenAPI Generator

    • 生成即用的 API 客户端
    • 适合快速开发,减少手动编码
  2. 只需要类型定义 → openapi-typescript

    • 极轻量,自行封装 API
    • 适合已有完善封装层的项目
  3. 需要按 tags 分割 → swagger-typescript-api

    • 按 OpenAPI tags 分割生成多个文件
    • 适合需要按业务模块组织代码的项目
    • 支持 --modular--module-first 选项
  4. 需要按 schema 分割 → openapi-generator-cli

    • 按 schema 分割到 models/ 目录
    • 适合需要按数据模型组织类型的项目
    • 注意:OpenAPI Generator 按 schema 分割,不是按 tags
  5. 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

工作流程

通用流程

  1. 后端生成 API 文档

    • HTTP API:使用 swaggo/swag 生成 Swagger/OpenAPI 文档
    • gRPC:使用 protoc 编译 .proto 文件
  2. 选择生成工具

    • 根据项目需求选择合适的工具
  3. 配置生成参数

    • 创建配置文件或使用命令行参数
  4. 执行代码生成

    • 通过 Makefile 或 npm script 执行生成命令
  5. 前端集成

    • 复制生成的代码到前端项目
    • 配置 API 客户端实例
    • 在组件或 Store 中使用

最佳实践

  • 后端驱动:生成逻辑放在后端代码库,前端只需复制生成的代码
  • Docker 容器化:使用 Docker 运行生成工具,避免本地环境依赖
  • 版本控制:生成的代码可以提交到 Git,便于版本管理
  • 自动化集成:将生成流程集成到 CI/CD,确保接口变更时自动更新

参考文档