Api-测试工具之swagger

宓和同
2023-12-01

        在当前敏捷开发的背景下,拿到需求文档后,正常情况线下都是接口先行原则,都希望最低的成本更快的实现相应的功能。于是就有了很多的的敏捷开发工具应运而生。最常用的有swagger,postman,Jmeter,mockjs,Apifox等。。。

昨天介绍了一下Apifox,今天给大家分享一下我理解的swagger吧!!!

swagger:

        Swagger是一款Restful接口的文档在线自动生成+功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的Web服务。目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器。简单点说就是使用swagge经常用来生成响应接口,swagger是根据restful api 风格下快速生成接口文档的开发工具之一。也可以通过你业务的控制层,来生成对应的接口文档。一旦你接口发生改变,swagger对应生成的接口文档也对应会变化。

        废话那么多 ,总结之后就是swagger的作用就是注解等方式用来生成API文档和接口测试的。

优点:

  • 调试功能,前端能很方便地调试接口数据

  • 代码生成功能,这样前端可以少写点代码,提高效率同时也提高了准确性

  • 接口同步功能,接口文档一定要是最新的代码信息

缺点:

  • 提交参数为 JSON 的时候不能格式化
  • 参数出错的时候查找麻烦
  • 查看多级模型时要一级级点开

废话那么多,干货来了干货来了干活来了。

swagger使用:(老套路:导入依赖,添加配置类,修改配置文件)

        1.导入依赖

一:引入Swagger依赖库
<!--引入swagger-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

        2.整合swagger

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))  
                //添加ApiOperiation注解的被扫描
                .paths(PathSelectors.any())
                .build();

    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("springboot整合swagger")
                                    .description("swagger的API文档")
                                    .version("1.0").build();
    }

}

        3.项目中使用swagger:(在接口上根据接口特点加上响应的注解)

        @Api:修饰整个类,描述Controller的作用

        @ApiOperation:描述一个类的一个方法,或者说一个接口

        @ApiModel:用对象来接收参数 ,修饰类

        @ApiModelProperty:用对象接收参数时,描述对象的一个字段

        @ApiResponse:HTTP响应其中1个描述

        @ApiResponses:HTTP响应整体描述,一般描述错误的响应

        @ApiIgnore:使用该注解忽略这个API

        @ApiError :发生错误返回的信息

        @ApiParam:单个参数描述

        @ApiImplicitParam:一个请求参数,用在方法上

        @ApiImplicitParams:多个请求参数

    /**
     * 债务类型分类统计
     */
    @AutoLog(value = "债务类型分类统计")
    @ApiOperation(value = "债务类型分类统计", notes = "债务类型分类统计")
    @GetMapping(value = "/debtTypeStatistics")
    public Result<List<DebtTypeStatisticsVO>> getDebtTypeStatistics() {
        return Result.OK(debtInfoService.getDebtTypeStatistics());
    }

4:通过本地地址访问

http://localhost:8080/swagger-ui.html#/

5:可能存在问题

对于只有一个HttpServletRequest参数的方法,如果参数小于5个,推荐使用 @ApiImplicitParams的方式单独封装每一个参数;如果参数大于5个,采用定义一个对象去封装所有参数的属性,然后使用@APiParam的方式

默认的访问地址:ip:port/swagger-ui.html#/,但是在shiro中,会拦截所有的请求,必须加上默认访问路径(比如项目中,就是ip:port/context/swagger-ui.html#/),然后登陆后才可以看到

在GET请求中,参数在Body体里面,不能使用@RequestBody。在POST请求,可以使用@RequestBody和@RequestParam,如果使用@RequestBody,对于参数转化的配置必须统一

controller必须指定请求类型,否则swagger会把所有的类型(6种)都生成出来

swagger在生产环境不能对外暴露,可以使用@Profile({“dev”, “prod”,“pre”})指定可以使用的环境

 类似资料: