SpringBoot整合Swagger测试api构建
@author:simplewu
什么是swagger?
swagger是什么:the world’s most popular api tooling
根据官网的介绍:
swagger inspector:测试api和生成openapi的开发工具。swagger inspector的建立是为了解决开发者的三个主要目标。
- 执行简单的api测试
- 生成openapi文档
- 探索新的api功能
我的理解swagger是一个规范和完整的框架,用于生成、描述、调用和可视化restful风格的web服务。简单来说,swagger是一个功能强大的接口管理工具,并且提供了多种编程语言的前后端分离解决方案。根据我的使用,当然我只是最简单的使用,我感觉swagger有以下几个优点:
swagger可以整合到代码中,在开发时通过注解,编写注释,自动生成api文档。
将前端后台分开,不会有过分的依赖。
界面清晰,无论是editor的实时展示还是ui的展示都十分人性化,如果自己仅仅用markdown来编写,又要纠结该如何展现,十分痛苦。
构建项目
step1.导入依赖
<!--swagger服务api构建个性包--> <dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger2</artifactid> <version>2.6.1</version> </dependency> <!--swagger ui界面--> <dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger-ui</artifactid> <version>2.6.1</version> </dependency> <!--springboot web服务--> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <!--springboot单元测试--> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency>
step2.编写swagger配置类
想要使用swagger功能必须提供配置类,主要配置ui界面信息,以及配置扫描位置,swagger会根据配置的路径扫描所有的服务生成api。
其中核心requesthandlerselectors.basepackage("com.simple.spring.boot.controller"),在这里配置我们的需要的扫描包位置。
@configuration @enableswagger2 public class swaggerconfig { @bean public docket createrestapi() { return new docket(documentationtype.swagger_2).apiinfo(apiinfo()) .select() .apis(requesthandlerselectors.basepackage("com.simple.spring.boot.controller")) .paths(pathselectors.any()).build(); } private apiinfo apiinfo() { return new apiinfobuilder() .title("spring boot中使用swagger2构建restful apis") .description("myapp") .termsofserviceurl("http://blog.csdn.net/simplewu") .version("1.0").build(); } }
step3.编写springboot启动类
@componentscan(basepackages={"com.simple.spring.boot.controller"}) 也是需要配置扫描路径。
@springbootapplication @componentscan(basepackages={"com.simple.spring.boot.controller"}) public class swaggerapplication { public static void main(string[] args) { springapplication.run(swaggerapplication.class, args); } }
step4.创建前端控制器
@restcontroller @api(tags = "swgger测试服务", description = "swgger测试服务") @requestmapping(value = "/simple/wu") public class testcontroller { @apioperation(value="测试post方法", notes="测试post方法") @apiimplicitparam(name = "令牌", value = "id", required = true, datatype = "token") @requestmapping(value="hello", method=requestmethod.post) public string post(@requestbody string token) { books.put(book.getid(), book); return "success"; } }
- @api(tags = "swgger测试服务", description = "swgger测试服务") 指定某个类提供服务的名字
- @apioperation(value="测试post方法", notes="测试post方法") 指定某个请求的名字
- @apiimplicitparam(name = "令牌", value = "token", required = true, datatype = "string")指定名字对应参数为令牌,以及对应参数字段token,required = true代表这个参数为必填参数,datatype 代表数据类型。
step5.启动服务
从上面的代码中我们指定请求为post在ui界面上我们会看到一个服务名字为swgger测试服务的大类点击进去后可以看到里面所拥有的请求,如果指定这个请求的类型那么无法进行单元测试,指定后我们会看到一个请求名字叫做测试post方法的请求并且需要填入必填参数token来完成我们的单元测试。
我们可以直接通过swaggerapplication类来运行main方法来进行服务,端口号默认为8080.
swagger地址:http://localhost:8080/swagger-ui.html 只需要在地址后面加上swagger-ui.html即可访问
我们访问这个位置即可看到ui界面,界面简洁并且容易上手,我这边就不截图了。
step.总结
swagger官方文档:https://www.baeldung.com/swagger-2-documentation-for-spring-rest-api
swagger的一个最大的优点是能实时同步api与文档。
在项目开发过程中,发生过多次:修改代码但是没有更新文档,前端还是按照老旧的文档进行开发,在联调过程中才发现问题的情况(当然依据开闭原则,对接口的修改是不允许的,但是在项目不稳定阶段,这种情况很难避免)。
推荐阅读
-
SpringBoot整合Kotlin构建Web服务的方法示例
-
SpringBoot整合Scala构建Web服务的方法
-
使用python3和flask构建RESTful API(接口测试服务与mockserver工具)
-
新建Springboot项目默认test包下的测试类报错缺少org.junit.jupiter.api
-
SpringBoot整合Swagger和Actuator的使用教程详解
-
用swagger-php/ui干API测试
-
【SpringBoot】十六、SpringBoot中整合Swagger2
-
SpringBoot+Mybatis+PageHelper+logback+Swagger+Maven的整合配置
-
springboot整合docker部署(两种构建Docker镜像方式)
-
SpringBoot2 整合 Swagger2