如何为 swagger REST API 文档生成 java 客户端代码
How to generate java client code for swagger REST API documentation
我的场景如下。
我有一个招摇。json eg.: http://petstore.swagger.io/v2/swagger.json
我想为上面的 REST API 使用生成的 java 客户端,例如:
PetApi petApi = new PetApi();
Pet pet = new Pet;
pet.setName("cica");
pet.setId(1L);
petApi.addPet(pet);
System.out.println(petApi.getById(1L));`
扩展输出:cica
并且根据 REST API 实现存储新宠物。
我已使用以下命令成功为宠物店生成服务器存根:
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate
-i http://petstore.swagger.io/v2/swagger.json
-l spring-mvc
-o samples/server/petstore/spring-mvc
但是这个maven项目代码是服务器代码。它有像 PetApi.java
中的 @RequestMapping
这样的注释,还有一个 WebMvcConfiguration.class
.
我不想有服务器存根。我想要宠物店 REST API.
的客户端库
有没有工具可以为我生成合适的客户端库?我应该修改服务器存根,因此它具有所有模型还是应该使用简单的 springRestTemplate?
感谢您的回答!
我认为您没有为 Swagger Codegen 的参数 -l
使用正确的值(您使用 spring-mvc
这是一种服务器端技术)。您可以尝试使用值 java
.
您可能还会注意到有一个工具 Restlet Studio,它允许从 Swagger 内容生成代码。对于Java,它主要依赖于Restlet框架,但我认为它可以满足您的需求。
希望对你有帮助,
蒂埃里
除了使用 JAR,您还可以使用 https://generator.swagger.io 在线生成 SDK(Java、Ruby、PHP 等)而无需安装任何东西。这是一个例子:
curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java
这是一个示例响应:
{"code":"1445940806041","link":"https://generator.swagger.io/api/gen/download/1445940806041"}
然后您可以从 link 下载压缩的 SDK。
有关自定义 https://generator.swagger.io 输出的更多选项,请参阅 https://github。com/swagger-api/swagger-codegen#online-generators
(Swagger Generator 是 Swagger Codegen 项目(免费、开源)的一部分,您也可以 运行 本地 Swagger 生成器)
截至 2017 年 7 月,Java API 客户端生成器支持以下 HTTP 库:Jersey 1.x & 2.x、Retrofit 1.x & 2.x, okhttp, Feign, RESTEasy, RestTemplate
更新:2018 年 5 月,大约 50 名 Swagger Codegen 的顶级贡献者和模板创建者决定分叉 Swagger Codegen 以维护名为 OpenAPI Generator. Please refer to the Q&A 的社区驱动版本以获取更多信息。
对于您的场景,您的命令应如下所示
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate
-i http://petstore.swagger.io/v2/swagger.json
-l java
-o samples/server/petstore/spring-mvc
将 swagger 转换为 jave 的其他选项是:
尽管对于 GitHub 项目,在将 swagger 转换为 Java 客户端或服务器代码时,由您决定使用哪个库(jersey、jersey2、okhttp-gson 等)。使用 generator.swagger.io,您还可以 decide which library to use. There might be an enhancement to editor.swagger.io 也能够 select 使用该库。要考虑的是 swagger.io 选项是完全免费的,而 Restlet 和 APIMATIC 是免费增值的。
虽然 swagger 生成器生成 Java SDK,但 APIMATIC sdk 非常成熟、详细,并且提供了比 Swagger Gen 更大的灵活性。您应该尝试 APIMATIC sdk 生成器,您会爱上它的。
可能是最快最简单的方法:
wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
java -jar swagger-codegen-cli-2.2.1.jar generate -l <language> -i <pathOrUrlOfSwaggerSpec>
更多信息here
只是 的愚蠢扩展。
curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java
如果导致这个错误(SSL证书问题)
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
为 curl 添加一个 -k 开关。示例:
curl -k -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java
回应
{"code":"7e542952-5385-4e34-8cf6-6196722fb18b","link":"https://generator.swagger.io/api/gen/download/7e542952-5385-4e34-8cf6-6196722fb18b"}
发送完整的 swagger 规范 JSON 负载而不是 URL
Instead of using swaggerUrl with an URL to the OpenAPI/Swagger spec,
you can also include the spec in the JSON payload with spec, e.g.
{
"options": {},
"spec": {
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": "Test API"
},
...
}
}
更多信息:Official Doc
我的场景如下。
我有一个招摇。json eg.: http://petstore.swagger.io/v2/swagger.json 我想为上面的 REST API 使用生成的 java 客户端,例如:
PetApi petApi = new PetApi();
Pet pet = new Pet;
pet.setName("cica");
pet.setId(1L);
petApi.addPet(pet);
System.out.println(petApi.getById(1L));`
扩展输出:cica
并且根据 REST API 实现存储新宠物。
我已使用以下命令成功为宠物店生成服务器存根:
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate
-i http://petstore.swagger.io/v2/swagger.json
-l spring-mvc
-o samples/server/petstore/spring-mvc
但是这个maven项目代码是服务器代码。它有像 PetApi.java
中的 @RequestMapping
这样的注释,还有一个 WebMvcConfiguration.class
.
我不想有服务器存根。我想要宠物店 REST API.
的客户端库有没有工具可以为我生成合适的客户端库?我应该修改服务器存根,因此它具有所有模型还是应该使用简单的 springRestTemplate?
感谢您的回答!
我认为您没有为 Swagger Codegen 的参数 -l
使用正确的值(您使用 spring-mvc
这是一种服务器端技术)。您可以尝试使用值 java
.
您可能还会注意到有一个工具 Restlet Studio,它允许从 Swagger 内容生成代码。对于Java,它主要依赖于Restlet框架,但我认为它可以满足您的需求。
希望对你有帮助, 蒂埃里
除了使用 JAR,您还可以使用 https://generator.swagger.io 在线生成 SDK(Java、Ruby、PHP 等)而无需安装任何东西。这是一个例子:
curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java
这是一个示例响应:
{"code":"1445940806041","link":"https://generator.swagger.io/api/gen/download/1445940806041"}
然后您可以从 link 下载压缩的 SDK。
有关自定义 https://generator.swagger.io 输出的更多选项,请参阅 https://github。com/swagger-api/swagger-codegen#online-generators
(Swagger Generator 是 Swagger Codegen 项目(免费、开源)的一部分,您也可以 运行 本地 Swagger 生成器)
截至 2017 年 7 月,Java API 客户端生成器支持以下 HTTP 库:Jersey 1.x & 2.x、Retrofit 1.x & 2.x, okhttp, Feign, RESTEasy, RestTemplate
更新:2018 年 5 月,大约 50 名 Swagger Codegen 的顶级贡献者和模板创建者决定分叉 Swagger Codegen 以维护名为 OpenAPI Generator. Please refer to the Q&A 的社区驱动版本以获取更多信息。
对于您的场景,您的命令应如下所示
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate
-i http://petstore.swagger.io/v2/swagger.json
-l java
-o samples/server/petstore/spring-mvc
将 swagger 转换为 jave 的其他选项是:
尽管对于 GitHub 项目,在将 swagger 转换为 Java 客户端或服务器代码时,由您决定使用哪个库(jersey、jersey2、okhttp-gson 等)。使用 generator.swagger.io,您还可以 decide which library to use. There might be an enhancement to editor.swagger.io 也能够 select 使用该库。要考虑的是 swagger.io 选项是完全免费的,而 Restlet 和 APIMATIC 是免费增值的。
虽然 swagger 生成器生成 Java SDK,但 APIMATIC sdk 非常成熟、详细,并且提供了比 Swagger Gen 更大的灵活性。您应该尝试 APIMATIC sdk 生成器,您会爱上它的。
可能是最快最简单的方法:
wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
java -jar swagger-codegen-cli-2.2.1.jar generate -l <language> -i <pathOrUrlOfSwaggerSpec>
更多信息here
只是
curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java
如果导致这个错误(SSL证书问题)
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
为 curl 添加一个 -k 开关。示例:
curl -k -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java
回应
{"code":"7e542952-5385-4e34-8cf6-6196722fb18b","link":"https://generator.swagger.io/api/gen/download/7e542952-5385-4e34-8cf6-6196722fb18b"}
发送完整的 swagger 规范 JSON 负载而不是 URL
Instead of using swaggerUrl with an URL to the OpenAPI/Swagger spec, you can also include the spec in the JSON payload with spec, e.g.
{ "options": {}, "spec": { "swagger": "2.0", "info": { "version": "1.0.0", "title": "Test API" }, ... } }
更多信息:Official Doc