Swagger技术概述

2022-10-27 13:12:03 浏览数 (2)

Swagger技术概述

Swagger出现的原因,很大程度上是由于前后端开发人员对于接口文档,无法做到高效的同步。前端人员苦于接口文档老旧,更新不及时,后端人员苦于在任务外另外维护接口文档。故而随着项目开发时间的推移,就导致项目的接口文档老旧,使用性差等问题暴露出来。

为解决这一问题而出现的Swagger,通过总结规范,开发项目工具,实现生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等。按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。

Swagger开发流程

1. 在SpringBoot项目中引入相关依赖

代码语言:javascript复制
<!-- swagger API框架-->
<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>

可以看到Swagger并不是SpringBoot官方提供的启动器,所以需要进行相关的配置

2. 编写配置类配置Swagger

代码语言:javascript复制
@Configuration  //配置类
@EnableSwagger2  //开启Swagger
public class SwaggerConfig {
}

这里并没有进行更多的配置,只是创建了配置类并开启Swagger,Swagger本身具备一些基本默认配置

3. 编写一个Hello工程测试结果

代码语言:javascript复制
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

4. 启动项目,测试SwaggerUI界面

访问路径:http://localhost:8080/swagger-ui.html

Swagger配置

1. 配置Swagger基本信息

包括了页面的标题和作者信息等基本内容(Docket对象是操作Swagger的实例)

代码语言:javascript复制
@Configuration  //配置类
@EnableSwagger2  //开启Swagger
public class SwaggerConfig {

    /**
     * 配置Swagger中的Docket的Bean实例
     * @return
     */
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());  //添加基本信息
    }

    /**
     * 配置Swagger基本信息APIINFO
     * @return
     */
    public ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("Ywrby", "https://ywrby.cn", "ywrby0214@gmail.com");
        return new ApiInfo(
                "Ywrby SwaggerTest API",
                "The test of Swagger",
                "1.0",
                "https://ywrby.cn",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());
    }
}

2. 配置扫描接口与开关

代码语言:javascript复制
/**
 * 配置Swagger中的Docket的Bean实例
 * @return
 */
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
            // 添加基本信息
            .apiInfo(apiInfo())
            //配置Swagger是否启动,默认为true,若为false则Swagger不能在浏览器中访问
            .enable(true)
            .select()
            // RequestHandlerSelectors,配置扫描接口的方式
            // basePackage: 指定要扫描的包
            // any: 扫描全部
            // none: 不扫描
            // withClassAnnotation: 指定要扫描的类上的注解(扫描具有指定注解的API),参数是一个注解的反射类,例如:GetMapping.class
            // withMethodAnnotation: 扫描方法上的注解
            .apis(RequestHandlerSelectors.basePackage("cn.ywrby.controller"))
            .build();
}

3. Swagger实现多环境配置

在不同的环境下生成不同的接口文档

代码语言:javascript复制
@Bean
public Docket docket(Environment environment){

    //设置要显示的项目环境(这里表示只在开发和测试环境下应用该配置)
    Profiles profiles=Profiles.of("dev","test");
    //判断当前项目环境是否在目标环境中,并返回布尔值
    boolean flag = environment.acceptsProfiles(profiles);
    
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .enable(flag);
}

测试后可以发现只有在开发和测试环境下才会显示接口文档,其他环境下不会显示接口文档

Swagger分组

代码语言:javascript复制
@Bean
public Docket docket1(Environment environment){ return new Docket(DocumentationType.SWAGGER_2).groupName("A"); }
@Bean
public Docket docket2(Environment environment){ return new Docket(DocumentationType.SWAGGER_2).groupName("A"); }
@Bean
public Docket docket3(Environment environment){ return new Docket(DocumentationType.SWAGGER_2).groupName("A"); }

Swagger2注解内容

用于controller类上:

注解

说明

@Api

对请求类的说明

代码语言:javascript复制
@Api(tags="说明该类的作用",value="该参数没什么意义,所以不需要配置")
用于方法上面(说明参数的含义):

注解

说明

参数

@ApiOperation

方法的说明

value=”说明方法的作用” notes=”方法的备注说明”

@ApiImplicitParams

用在请求的方法上,包含一组参数说明

@ApiImplicitParam

对单个参数的说明

name:参数名 value:参数的说明、描述 required:参数是否必须必填

用于方法上面(返回参数或对象的说明):

注解

说明

参数

@ApiResponses

方法返回对象的说明

@ApiResponse

每个参数的说明

code:数字,例如400 message:信息,例如”请求参数没填好” response:抛出异常的类

对象类:

注解

说明

参数

@ApiModel

用在JavaBean类上,说明JavaBean的 用途

description

@ApiModelProperty

用在JavaBean类的属性上面,说明此属性的的含议

value ,required

0 人点赞