1 传统测试工具postman
(1)简介
这个工具测试有所弊端要自己填充一些测试数据才可以非常麻烦
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。postman被500万开发者和超100,000家公司用于每月访问1.3亿个API。java开发通常是作为后台开发语言,通常的项目中的接 口开发需要一款测试工具来调试接口,这样无需前端页面也不耽误后台代码的开发进度,postman作为 一个接口测试工具,是一个非常不错的选择。
通过以上描述,希望初学者可以快速的安装和使用postman来进行接口的测试,当然,这里描述并不详 尽,postman作为一个接口测试的利器,还有很多特别强大的功能并没有介绍,后面随着项目的深入会 继续使用。
2 Swagger介绍
(1) 简介
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(http s://swagger.io/)。 它的主要作用是:
使得前后端分离开发更加方便,有利于团队协作
接口的文档在线自动生成,降低后端开发人员编写接口文档的负担
功能测试
Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在 项目中引入Springfox ,即可非常简单快捷的使用Swagger。
(2) SpringBoot集成Swagger
- 引入依赖,在oldlu-leadnews-model模块中引入该依赖
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency>
只需要在oldlu-leadnews-common中进行配置即可,因为其他微服务工程都直接或间接依赖即可。
- 在oldlu-leadnews-admin工程的config包中添加一个配置类
package com.admin.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.service.Contact; @Configuration @EnableSwagger2 public class SwaggerConfiguration { @Bean public Docket buildDocket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(buildApiInfo()) .select() // 要扫描的API(Controller)基础包 .apis(RequestHandlerSelectors.basePackage("com.oldlu")) .paths(PathSelectors.any()) .build(); } private ApiInfo buildApiInfo() { Contact contact = new Contact("程序员", "", ""); return new ApiInfoBuilder() .title("平台管理API文档") .description("平台管理服务api") .contact(contact) .version("1.0.0").build(); } }
(3)Swagger常用注解
在Java类中添加Swagger的注解即可生成Swagger接口文档,常用Swagger注解如下:
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数的描述信息
@ApiModel: 用 对 象 来 接 收 参 数
@ApiModelProperty:用对象接收参数时,描述对象的一个字段@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP 响 应 整 体 描 述
@ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数的描述信息
@ApiImplicitParam属性:
属性 取值 作用
paramType 查询参数类型
path 以地址的形式提交数据
query 直接跟参数完成自动映射赋值
body 以流的形式提交 仅支持POST
header 参数在request headers 里边提交
form 以form表单的形式提交 仅支持POST
dataType 参数的数据类型 只作为标志说明,并没有实际验证
Long
String
name 接收参数名
value 接收参数的意义描述
required 参数是否必填
true 必填
false 非必填
defaultValue 默认值
我们在AdChannelControllerApi中添加Swagger注解,代码如下所示:
@Api(value = "频道管理", tags = "channel", description = "频道管理API") public interface AdChannelControllerApi { /** * 根据名称分页查询频道列表 * * @param dto * @return */ @ApiOperation("根据名称分页查询频道列表") public ResponseResult findByNameAndPage(ChannelDto dto); }
ChannelDto
@Data public class ChannelDto extends PageRequestDto { /** * 频道名称 */ @ApiModelProperty("频道名称") private String name; }
PageRequestDto
@Data @Slf4j public class PageRequestDto { @ApiModelProperty(value="当前页",required = true) protected Integer size; @ApiModelProperty(value="每页显示条数",required = true) protected Integer page; public void checkParam() { if (this.page == null || this.page < 0) { setPage(1); } if (this.size == null || this.size < 0 || this.size > 100) { setSize(10); } } }
启动admin微服务,访问地址:
http://localhost:9001/swagger-ui.html
查询 先点击Try it out 输入参数,然后点击Execute,结果如下:
3 knife4j
(1)简介
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!
gitee地址:https://gitee.com/xiaoym/knife4j
官方文档:https://doc.xiaominfo.com/
效果演示:http://knife4j.xiaominfo.com/doc.html
(2)核心功能
该UI增强包主要包括两大核心功能:文档说明 和 在线调试
文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示 例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说 明,对该接口的使用情况一目了然。
在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数 可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者 在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。
个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息
离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown 接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件
接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进 行接口对接
(3)快速集成
- 在oldlu-leadnews-common模块中的 pom.xml 文件中引入knife4j 的依赖,如下:
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> </dependency>
- admin模块的swagger配置类中,加上两个注解
@EnableKnife4j @Import(BeanValidatorPluginsConfiguration.class)
注解 说明
@EnableSwagger2 该注解是Springfox-swagger框架提供的使用Swagger注解,该注解必须加
@EnableKnife4j 该注解是knife4j 提供的增强注解,Ui提供了例如动态参数、参数过滤、接口排序等增强功能,如果你想使用这些增强功能就必须加该注解,否则可以不用加
访问
在浏览器输入地址: http://localhost:9001/doc.html
查询频道列表:
还可以下载接口文档
4 常见错误
4.1 knife4j 不能设置请求Header
问题描述:
knif4j 不能设置请求头信息
解决方案:
开启动态请求参数,刷新即可。