文章目录

  • 什么是Open API规范定义文件呢?
  • 生成Rest Client
  • 在Spring Boot中使用
  • API Client 配置
  • 使用Maven plugin
  • 在线生成API

Spring Boot中使用Swagger CodeGen生成REST client

Swagger是一个非常好用的API工具,我们会使用Swagger来暴露API给外界测试,那么有没有简单的办法来生成对应的调client呢?

Swagger CodeGen是一个REST 客户端生成工具,它可以从Open API的规范定义文件中生成对应的REST Client代码。本文我们将会举例说明如何通过OpenAPI 规范定义文件自动生成REST Client。

什么是Open API规范定义文件呢?

OpenAPI规范(OAS)为RESTful API定义了一个与语言无关的标准接口,使人类和计算机都可以发现和理解服务的功能,而无需访问源代码,文档或通过网络流量检查。 正确定义后,使用者可以使用最少的实现逻辑来理解远程服务并与之交互。

然后,文档生成工具可以使用OpenAPI定义来显示API,代码生成工具可以使用各种编程语言,测试工具和许多其他用例来生成服务器和客户端。

值得一提的是OpenAPI规范最早也是Swagger提出来的,后面被捐赠给了社区。

推荐的OpenAPI 文档名字通常为openapi.json 或者 openapi.yaml。

我们看一个swagger自带的 petstore open api 例子: https://petstore.swagger.io/v2/swagger.json

 {"swagger": "2.0","info": {"description": "This is a sample server Petstore server.  You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).  For this sample, you can use the api key `special-key` to test the authorization filters.","version": "1.0.3","title": "Swagger Petstore","termsOfService": "http://swagger.io/terms/","contact": {"email": "apiteam@swagger.io"},"license": {"name": "Apache 2.0","url": "http://www.apache.org/licenses/LICENSE-2.0.html"}},"host": "petstore.swagger.io","basePath": "/v2","tags": [...],"schemes": ["https","http"],"paths": {..."definitions": {...},"externalDocs": {"description": "Find out more about Swagger","url": "http://swagger.io"}
}

我们可以看到在这个open API 定义文件里面包含了我们在swagger界面上看到的一切,paths,definitions等。

生成Rest Client

有了Open Api定义文件之后,我们就可以使用 swagger-codegen-cli 来生成对应的rest client文件了。

目前为止,最新的swagger-codegen-cli版本是2.4.12, 我们可以从这里下载 https://search.maven.org/classic/remotecontent?filepath=io/swagger/swagger-codegen-cli/2.4.12/swagger-codegen-cli-2.4.12.jar。

下载到本地之后,我们可以通过如下命令来生成rest client:

java -jar swagger-codegen-cli-2.4.12.jar generate \-i http://petstore.swagger.io/v2/swagger.json \--api-package com.flydean.client.api \--model-package com.flydean.client.model \--invoker-package com.flydean.client.invoker \--group-id com.flydean \--artifact-id springboot-generate-restclient \--artifact-version 0.0.1-SNAPSHOT \-l java \--library resttemplate \-o springboot-generate-restclient

上述的参数包含:

  • -i 指定了open api 定义文件的地址
  • –api-package, –model-package, –invoker-package 指定了生成文件的package
  • –group-id, –artifact-id, –artifact-version 指定生成的maven 项目的属性
  • -l 指明生成的代码编程语言
  • –library 指定了实际的实现框架
  • -o 指定输出文件目录

Swagger Codegen 支持如下的Java 库:

  • jersey1 – Jersey1 + Jackson
  • jersey2 – Jersey2 + Jackson
  • feign – OpenFeign + Jackson
  • okhttp-gson – OkHttp + Gson
  • retrofit (Obsolete) – Retrofit1/OkHttp + Gson
  • retrofit2 – Retrofit2/OkHttp + Gson
  • rest-template – Spring RestTemplate + Jackson
  • rest-easy – Resteasy + Jackson

在Spring Boot中使用

我们把生成的代码拷贝到我们的Spring Boot项目中。然后通过下面的代码来启动应用程序:

@SpringBootApplication
public class GenerateClientApp {public static void main(String[] args) {SpringApplication.run(GenerateClientApp.class, args);}@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.build();}}

我们再定义一个controller:

@RestController
public class PetController {@Autowiredprivate PetApi petApi;@GetMapping("/api/findAvailablePets")public List<Pet> findAvailablePets() {return petApi.findPetsByStatus(Arrays.asList("available"));}
}

现在通过curl localhost:8080/api/findAvailablePets就可以远程调用http://petstore.swagger.io/v2/swagger.json 里面暴露的接口了。

API Client 配置

默认情况下ApiClient是默认的不需要认证的,如果需要认证,可以自定义ApiClient如下:

@Bean
public ApiClient apiClient() {ApiClient apiClient = new ApiClient();OAuth petStoreAuth = (OAuth) apiClient.getAuthentication("petstore_auth");petStoreAuth.setAccessToken("special-key");return apiClient;
}

使用Maven plugin

除了使用cli命令之外,我们还可以在pom中添加plugin来实现这个功能:

<build><plugins><plugin><groupId>io.swagger</groupId><artifactId>swagger-codegen-maven-plugin</artifactId><version>2.4.12</version><executions><execution><goals><goal>generate</goal></goals><configuration><inputSpec>swagger.json</inputSpec><language>java</language><library>resttemplate</library></configuration></execution></executions></plugin></plugins></build>

在线生成API

我们可以通过http://generator.swagger.io来在线生成API代码:

curl -X POST -H "content-type:application/json" \
-d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' \
http://generator.swagger.io/api/gen/clients/java

该命令会返回一个包含代码的zip包供你下载。

本文的例子可以参考 https://github.com/ddean2009/learn-springboot2/tree/master/springboot-generate-restclient

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多教程请参考 flydean的博客

Spring Boot中使用Swagger CodeGen生成REST client相关推荐

  1. 在spring boot中集成Swagger

    Swagger 在spring boot中集成Swagger 新建一个swagger项目 maven依赖 <!-- https://mvnrepository.com/artifact/io.s ...

  2. spring boot中利用mybatis-generator插件生成代码

    使用Idea在spring boot中集成mybatis-generator,自动生成mapper.xml  model  dao 文件 一.配置 pom.xml 在pom.xml的<plugi ...

  3. Spring Boot中使用Swagger2构建RESTful APIs

    关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. S ...

  4. Spring Boot中的微信支付(小程序)

    前言 微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的. 一.申请流程和步骤 图1-1 注册微信支付账号 获取微信小程序APPID 获取微信商家的商户ID 获取 ...

  5. Spring Boot中使用Swagger3.0.0版本构建RESTful APIs

    文章目录 一.项目描述 二.简介 三.Swagger2.X和Swagger3.0.0 的对比 1)SpringFox 2.x 发布 2)SpringFox 3.0.0 发布 3)swagger3.0 ...

  6. Spring Boot 中使用 MongoDB 增删改查

    本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...

  7. Spring Boot中如何扩展XML请求和响应的支持

    在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...

  8. 如何在Spring Boot中玩转智能合约【修订版】

    本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用.让 java 程序可以和我们的智能合约愉快的交互起来~ 一. 什么是 web3j web3j是一个高度模块化.响 ...

  9. 如何在Spring Boot中玩转智能合约

    本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用.让 java 程序可以和我们的智能合约愉快的交互起来~ 一.什么是 web3j web3j是一个高度模块化.响应 ...

最新文章

  1. CSS 选择器:BeautifulSoup4解析器
  2. Spring消息之WebSocket
  3. TSV_TNEW_PAGE_ALLOC_FAILED
  4. 如何快速将Android库发布到JCenter
  5. 11 步教你选择最稳定的 MySQL 版本
  6. 帆软报表调用python脚本_帆软报表(finereport)实现自动滚屏效果
  7. KEIL STC 仿真
  8. 关于数据分析岗位的工作思考
  9. JAVA钓鱼游戏_java如何实现纸牌游戏之小猫钓鱼算法
  10. 51单片机带闹钟c语言程序,51单片机编写的闹钟程序
  11. Giving an effective oral presentation at university(The Hong Kong Polytechnic University 香港理工大学)
  12. listview qt 选中内容_演练: 操作Qt应用中的QListView
  13. tftp和xinetd服务器的配置
  14. 全球与中国氧化PAN纤维市场销售现状与投资前景预测报告2022~2027年
  15. 若某非空二叉树的先序序列和后序序列正好相反,或者正好相同,则二叉树形态是怎么样的?
  16. 编译与调试以及makefile
  17. vue项目前端导出xlsx表格带边框
  18. “我们的开源项目”发起人、息壤开源社区共同创始人——程旭文专访
  19. 基于plc的污水处理,组态王动画仿真,带PLC源代码,组态王源代码,图纸,IO地址分配
  20. Matlab实现螺纹识别

热门文章

  1. qpython怎么添加pip_Q: 在Windows上安装Python 2.7的pyHook和pip
  2. CSP-2019总结
  3. cocos2d-x游戏实例(24)-简易动作游戏(2)
  4. SQLLite (三):sqlite3_get_table,sqlite3_free_table
  5. Kafka分区分配策略(2)——RoundRobinAssignor和StickyAssignor
  6. 模拟RabbitMQ网络分区
  7. 构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥
  8. VVC专利池最新进展:MC-IF正在召集专利拥有者
  9. LiveVideoStack线上分享第四季(十):图像视频降噪的现在与未来——从经典方法到深度学习...
  10. 卡牌特效: svg不规则倒计时动效