【问题标题】:How to generate java client code for swagger REST API documentation如何为 swagger REST API 文档生成 java 客户端代码
【发布时间】:2022-04-24 14:57:26
【问题描述】:

我的场景如下。

我有一个招摇的 .json 例如: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 实现存储。

我已使用以下命令成功为 petstore 生成了服务器存根:

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

我不想拥有服务器存根。我想要一个用于 petstore REST API 的客户端库。

有没有工具可以为我生成合适的客户端库?我应该修改服务器存根,因此它具有所有模型还是应该使用简单的 springRestTemplate?

感谢您的回答!

【问题讨论】:

    标签: java rest swagger


    【解决方案1】:

    除了使用 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"}  
    

    然后您可以从该链接下载压缩的 SDK。

    更多自定义https://generator.swagger.io输出的选项,请参考https://github.com/swagger-api/swagger-codegen#online-generators

    (Swagger 生成器是 Swagger Codegen 项目(免费、开源)的一部分,您也可以运行本地 Swagger 生成器)

    截至 2017 年 7 月,Java API 客户端生成器支持以下 HTTP 库:Jersey 1.x & 2.x、Retrofit 1.x & 2.x、okhttp、Feign、RESTEasy、RestTemplate

    更新:2018 年 5 月,Swagger Codegen 的大约 50 位顶级贡献者和模板创建者决定分叉 Swagger Codegen 以维护一个名为 OpenAPI Generator 的社区驱动版本。更多信息请参考Q&A

    【讨论】:

      【解决方案2】:

      我认为您没有为 Swagger Codegen 的参数-l 使用正确的值(您使用的是服务器端技术spring-mvc)。您可以尝试使用值java

      您还可能注意到有一个工具,Restlet Studio,它允许从 Swagger 内容生成代码。对于 Java,它主要依赖于 Restlet 框架,但我认为它可以满足您的需求。

      希望对你有帮助 蒂埃里

      【讨论】:

      • 感谢您的回答。我无法理解我怎么会错过手册中的这一部分,但这正是我需要的答案。
      【解决方案3】:

      对于您的场景,您的命令应如下所示

      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。可能有一个enhancement to editor.swagger.io 也可以选择要使用的库。需要考虑的是 swagger.io 选项是完全免费的,而 Restlet 和 APIMATIC 是免费增值的。

      【讨论】:

      • editor.swagger.io 使用同样由 swagger codegen 项目提供支持的 generator.swagger.io 来生成 API 客户端、服务器存根和 API 文档。
      • @wing328 你说得对,我知道如果你使用 swagger-codegen 项目或在线版本 (generator.swagger.io) 仍然会有所不同。在线您无法选择应使用哪个库进行转换。
      • 你可以。请参考github.com/swagger-api/swagger-codegen#online-generators 了解如何传递各种选项来自定义输出。对于 editor.swagger.io,还有一个关于添加菜单以自定义输出的讨论:github.com/swagger-api/swagger-editor/issues/713
      • 感谢您的意见,我相应地更新了我的答案。如果您现在可以,请随时投票
      • 只是为了澄清,宠物店的最终 URL 是 petstore.swagger.io:443/v2/swagger.json ,否则 swagger-codegen-cli.jar 会抛出 com.fasterxml.jackson.core.JsonParseException
      【解决方案4】:

      可能是最快和最简单的方法:

      1. wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
      2. java -jar swagger-codegen-cli-2.2.1.jar generate -l <language> -i <pathOrUrlOfSwaggerSpec>

      更多信息here

      【讨论】:

        【解决方案5】:

        只是对@wing328's answer 的一个愚蠢的扩展。

        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

        而不是使用带有指向 OpenAPI/Swagger 规范的 URL 的 swaggerUrl, 您还可以使用规范在 JSON 有效负载中包含规范,例如

        {
          "options": {},
          "spec": {
            "swagger": "2.0",
            "info": {
              "version": "1.0.0",
              "title": "Test API"
            },
            ...
          }
        }
        

        更多信息:Official Doc

        【讨论】:

        • 我认为这与主题无关。我认为在 UNIX 系统上使用甚至安装“curl”命令是一个不同的问题。
        • @csikos.balint 这是相关的,因为当我尝试时,它导致证书错误......我没有在这里添加 curl 的随机选项。
        【解决方案6】:

        虽然 swagger 生成器生成 Java SDK,但 APIMATIC sdk 相当成熟、详细,并且比 Swagger Gen 提供了更多的灵活性。您应该尝试 APIMATIC sdk 生成器,您会喜欢的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-22
          • 1970-01-01
          • 2022-10-05
          • 2018-08-29
          • 2022-01-07
          • 2017-08-06
          • 2018-12-24
          • 2019-06-24
          相关资源
          最近更新 更多