搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

OpenAPITools/openapi-generator

开发工具

根据 OpenAPI 2.0/3.x 规范生成多语言 API 客户端、服务端桩代码、文档和配置。

26,860
7,760
Java
Apache-2.0
创建于 8 年前

项目介绍

OpenAPI Generator 读取 OpenAPI/Swagger 规范(支持 1.x 到 3.0,3.1 为 beta),自动生成客户端 SDK、服务端桩代码、文档和配置。它是 Swagger Codegen 的社区分支,由 40 多位原贡献者发起,面向需要跨语言统一客户端交付的 API 提供方,以及不想手写 HTTP 胶水代码的 API 使用方。项目提供 Java CLI、Maven/Gradle 插件、Docker 镜像、Node 包装器和 pip 包,也支持自托管在线生成服务。

快速使用

用 CLI JAR 时,唯一硬性前提是 Java 运行环境,文档要求至少 Java 11,可先用 java -version 确认。

下载已发布的 CLI JAR,并以 Petstore 示例生成一个客户端:

wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.27.0/openapi-generator-cli-7.27.0.jar -O openapi-generator-cli.jar
java -jar openapi-generator-cli.jar generate \
  -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \
  -g php \
  -o /tmp/php_api_client

生成的 PHP 客户端位于 /tmp/php_api_client。把 -g php 换成其他生成器名、调整输出目录即可生成别的语言。java -jar openapi-generator-cli.jar help generate 查看通用选项,config-help -g php 查看该生成器的专属选项。

替代方式:用 Homebrew 安装(brew install openapi-generator),或用官方 CLI 镜像免去本地 JVM:

docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli generate \
  -i https://raw.githubusercontent.com/openapitools/openapi-generator/master/modules/openapi-generator/src/test/resources/3_0/petstore.yaml \
  -g go \
  -o /local/out/go

生成结果写入宿主机的 ./out/go。项目还提供在线镜像,可自托管 HTTP 生成接口用于 CI 流程。

使用约束

  • CLI 依赖 JVM;pip 和 Node 包装器仍需要 Java 可执行文件,除非使用 jdk4py(要求 Python 3.10+)。当前版本一般要求 Java 11 或更新。
  • 从源码构建需要 Java 11,可选 Maven 3.8.8+;项目自带 Maven wrapper,Linux/macOS 用 ./mvnw clean install,Windows 用 mvnw.cmd clean install。
  • 各语言的生成器行为、选项和模板结构不同,选项按生成器分别记录,使用前应查阅对应语言的生成器文档和 config-help 输出。
  • minor 版本可能包含破坏性变更(带回退机制);实际使用时建议固定版本(launcher 脚本可设 OPENAPI_GENERATOR_VERSION,包装器指定明确版本),避免升级导致生成结果漂移。
  • 生成代码刻意不受父项目 Apache-2.0 许可证约束,按原样提供,许可方式由使用者决定。
  • 公开在线服务 api.openapi-generator.tech 和 api-latest-master.openapi-generator.tech 均为 beta,不保证服务级别。
  • launcher 脚本会在调用时查询并下载最新版本;把它加入 PATH 前应先检查脚本内容,其自身文档也提醒要审阅从外部获取的脚本。

集成与定制

Maven、Gradle、sbt、Bazel、GitHub 与 CI/CD 的接入方式见 docs/integration.md,输出定制(包名、版本、模板等)见 docs/customization.md。社区提供了 Eclipse、IntelliJ IDEA、Visual Studio 和 VS Code 插件。内置模板仅完整支持 Mustache,其他模板引擎为实验性。

HotRepo 点评

这个项目覆盖的语言矩阵非常广,但接受度并不一致。README 自述 NPM CLI 包装器每周约 60 万次下载、CLI Docker 镜像约 3000 万次下载,说明使用面确实很大。2022 年 Hacker News 讨论中,一位评论者被多语言和 OpenAPI 3 支持吸引,却对 Java 编写生成器的强制要求、模板扩展困难以及部分生成代码的项目结构表示失望(评论);另一位评论者表示 Go 结构体生成器难以跑通,转而使用 Deepmap 的 oapi-codegen(评论)。同一讨论中,维护者感谢了这条推荐(回复),也有竞品 SDK 厂商承认现有 OpenAPI 生成器存在 bug、生成物偏机器可读而非好用(评论)。实际取舍是:广覆盖是优势,但需要按语言逐一评估生成质量,必要时固定版本并定制模板。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。

Hacker News 讨论

OpenAPI Generator allows generation of API client libraries from OpenAPI Specs
▲ 122 · 67 条评论 · 2022年10月16日
The first public release (3.0.0) of OpenAPI Generator
▲ 10 · 0 条评论 · 2018年6月2日
OpenAPI Generator 4.2.2 (2019 last release): new TS redux-query generator
▲ 6 · 5 条评论 · 2019年12月2日

相关推荐

  1. usebruno/bruno本地优先的 API 客户端,把请求集合保存为纯文本文件,便于版本控制和 CI。JavaScript47,919
  2. fastapi/fastapi把 Python 类型注解直接变成校验、序列化和 OpenAPI 文档的后端 API 框架。Python104,076
  3. Balanov/equal把真实 HTTP API 流量录成可离线回放的本地沙箱,并据此生成 OpenAPI 3.1 文档。Go114