API框架-Swagger

  • 号称世界上最流行的API框架
  • RestFul API文档在线生成工具--->>>API文档与API同步更新
  • 可以直接运行,可以在线测试API接口
  • 支持多种语言:(Java,PHP.....)

1 诞生原由

在web开发的场景下,分为两个大时代:

1.1 以前的时代

SSM + JSP模板引擎====>后端程序员

也就是整套程序从前台到后台的代码全是后端程序员开发。

1.2 现在的时代

可称为前后端分离时代

当然这套实现早在16、17年时就已经开始上线了。而且在22年的今天,主要实现技术为:SpringBoot + VUE..........等等

主要概念为:

  • 后端:后端控制层 + 服务层 + 数据访问层

    后端使用postman、curl等工具进行测试。

  • 前端:前端控制层 + 视图层

    前端可以单独测试,即伪造后端交互数据,不需要后端传入json数据了,前端工程已经可以运行。

前后端交互:

  • 通过相关的API接口进行交互
  • 前后端相对独立,松耦合
  • 前后端可以分别部署在不同的服务器上

问题:

因为前后端是分别开发的,那么当前后端集成联调时,前端和后端开发人员无法做到及时协商,尽早解决问题,就会导致项目延期。

说白了就是后端没有及时提供更新后的API给前端程序。

2 使用Swagger

使用SpringBoot集成Swagger需要两个依赖:

  • springfox-swagger2
  • springfox-swagger-ui
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

配置swagger:

@Configuration // 标识配置类
@EnableSwagger2 // 开启Swagger
public class SwaggerConfig {
​
    /**
    * 配置Swagger信息
    */
    private ApiInfo apiInfo() {
        // 配置作者信息
        Contact contact = new Contact("qgao",
                "https://www.qgaoIdea.com",
                "qgao233@163.com");
        // 配置API文档标题
        return new ApiInfo("框架师Api",
                // API文档描述
                "Api Documentation",
                // API版本号
                "1.0",
                // 配置URL(公司官网/blog地址)
                "https://www.qgaoIdea.com",
                // 作者信息
                contact,
                // 以下内容默认即可
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());
    }
​
    /**
   * 配置了Swagger的Docket的Bean实例
   */
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                // 配置扫描接口
                .select()
                // 配置Swagger是否启动,默认:true
                .enable(false)
                /*
                *RequestHandlerSelectors,配置要扫描接口的方式
                * 参数说明:
                * basePackage:基于包扫描
                * class:基于类扫描
                * any():扫描全部
                * none():全部都不扫描
                * withMethodAnnotation:通过方法的注解扫描
                * // withMethodAnnotation(GetMapping.class))
                * withClassAnnotation:通过类的注解扫描
                */
                .apis(RequestHandlerSelectors.basePackage("com.mobai.swagger.controller"))
                // .paths()过滤,不扫描哪些接口
                .paths(PathSelectors.any())
                .build();
    }

}

测试运行 唯一地址:http://localhost:8080/swagger-ui.html

2.1 常用注解

  • @ApiModel("注释"):声明在实体类上,给类添加注释
  • @ApiModelProperty("注释"):声明在成员变量上,给成员变量添加注释
  • @Api(""):声明在接口类上,给类添加注释
  • @ApiOperation("注释"):声明在方法上,给接口(一般是Controller)的方法添加注释
  • @ApiParam(""):声明在方法的入参上,给方法的参数添加注释

3 使用案例

3.1 案例1:开发启用,生产关闭

Ⅰ、添加:

  • 默认配置:application.properties

    spring.profiles.active=dev

  • 测试环境:application-dev.properties

    server.port=8081

  • 生产环境:application-prod.properties

    server.port=8082

Ⅱ、SwaggerConfig配置类判断当前环境:

@Bean
public Docket docket(Environment environment) {
    // 设置要显示的Swagger环境
    Profiles profiles = Profiles.of("dev", "prod");
    // 通过environment.acceptsProfiles();判断自己是否在自己设定换的环境当中
    boolean flag = environment.acceptsProfiles(profiles);
​
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            // 监听自己设置的环境
            .enable(flag)
            // 配置扫描接口
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.qgao.swagger.controller"))
            .paths(PathSelectors.any())
            .build();
}

3.2 案例2:配置API文档的分组

Ⅰ、如何配置组:

在后面加上
// 配置分组
.groupName("qgao")

Ⅱ、配置多个组:

@Bean
public Docket docket1() {
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("A");
}
​
@Bean
public Docket docket2() {
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("B");
}
​
@Bean
public Docket docket3() {
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("C");
}
Copyright © qgao 2021-* all right reserved,powered by Gitbook该文件修订时间: 2022-08-20 10:20:38

results matching ""

    No results matching ""