zoukankan      html  css  js  c++  java
  • 9、Swagger

    Swagger

      接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变成重中之重。接口文档固然重要,但是由于项 目周期等原因后端人员经常出现无法及时更新,导致前端人员抱怨接 口文档和实际情况不一致。

    很多人员会抱怨别人写的接口文档不规范,不及时更新。当时当 自己写的时候确实最烦去写接口文档。这种痛苦只有亲身经历才会牢 记于心。

    如果接口文档可以实时动态生成就不会出现上面问题。

    Swagger 可以完美的解决上面的问题。

    Swagger 简介:


      Swagger 是一套围绕 Open API 规范构建的开源工具,可以帮助设 计,构建,记录和使用 REST API。

    Swagger 工具包括的组件:

    • Swagger Editor :基于浏览器编辑器,可以在里面编写 Open API规范。类似 Markdown 具有实时预览描述文件的功能。
    • Swagger UI:将 Open API 规范呈现为交互式 API 文档。用可视化UI 展示描述文件。
    • Swagger Codegen:将 OpenAPI 规范生成为服务器存根和客户端 库。通过 Swagger Codegen 可以将描述文件生成 html 格式和 cwiki 形 式的接口文档,同时也可以生成多种言语的客户端和服务端代码。

    Swagger Inspector:和 Swagger UI 有点类似,但是可以返回更多 信息,也会保存请求的实际参数数据。

    Swagger Hub:集成了上面所有项目的各个功能,你可以以项目 和版本为单位,将你的描述文件上传到 Swagger Hub 中。在 Swagger Hub 中可以完成上面项目的所有工作,需要注册账号,分免费版和收费版。

    使用 Swagger,就是把相关的信息存储在它定义的描述文件里面(yml 或 json 格式),再通过维护这个描述文件可以去更新接口文档, 以及生成各端代码。

    Swagger集成

    1、新建springbootweb项目导入maven依赖

    <!--swagger依赖-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>

    2、创建Swagger配置:config/SwaggerConfig.java

     1 import org.springframework.context.annotation.Configuration;
     2 import springfox.documentation.swagger2.annotations.EnableSwagger2;
     3 
     4 /**
     5  * @author zhangzhixi
     6  */
     7 @Configuration
     8 @EnableSwagger2 // 开启Swagger2
     9 public class SwaggerConfig {
    10 
    11 }

    3、测试访问

    访问:localhost:8080/swagger-ui.html

     swagger首页DIY:

    在SwaggerConfig进行如下配置即可自定义Swagger配置

     1 package com.zhixi.config;
     2 
     3 import org.springframework.context.annotation.Bean;
     4 import org.springframework.context.annotation.Configuration;
     5 import springfox.documentation.service.ApiInfo;
     6 import springfox.documentation.service.Contact;
     7 import springfox.documentation.spi.DocumentationType;
     8 import springfox.documentation.spring.web.plugins.Docket;
     9 import springfox.documentation.swagger2.annotations.EnableSwagger2;
    10 
    11 import java.util.ArrayList;
    12 
    13 /**
    14  * @author zhangzhixi
    15  */
    16 @Configuration
    17 @EnableSwagger2 // 开启Swagger2
    18 public class SwaggerConfig {
    19 
    20     // 配置Swagger
    21     @Bean
    22     public Docket docket() {
    23         // 返回docket的bean实例
    24         return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    25     }
    26 
    27     // 配置swagger的信息-api-info
    28     private ApiInfo apiInfo() {
    29         // 作者说明
    30         Contact contact = new Contact("志喜", "https://www.cnblogs.com/zhangzhixi", "1820712542@qq.com");
    31         return new ApiInfo(
    32                 "志喜的SwaggerAPI文档",
    33                 "人生没有白走的路~",
    34                 "1.0",
    35                 "urn:tos",
    36                 contact,
    37                 "Apache 2.0",
    38                 "http://www.apache.org/licenses/LICENSE-2.0",
    39                 new ArrayList());
    40     }
    41 }

    Swagger扫描接口:


    // 配置Swagger
    @Bean
    public Docket docket() {
        // 返回docket的bean实例
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(true)//是否启用Swagger,false则不启用
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basePackage,指定扫描包
                //.apis(RequestHandlerSelectors.any()),扫描全部
                //.apis(RequestHandlerSelectors.none()),不扫描
                //withMethodAnnotation(GetMapping.class)) //扫描类上的注解
                //withClassAnnotation(GetMapping.class)) //扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.zhixi.controller"))
                //Path过滤路径
                //.paths(PathSelectors.ant("/com/**"))
                .build();
    }
    

    实现开发环境中使用Swagger,运行上线环境中不使用Swagger:

     // 配置Swagger
     @Bean
     public Docket docket(Environment environment) {
         //设置要显示的Swagger环境
         Profiles profiles = Profiles.of("dev", "test");
         //获取项目的环境:判断是否处在自己设定的环境中
         boolean flag = environment.acceptsProfiles(profiles);
         // 返回docket的bean实例
         return new Docket(DocumentationType.SWAGGER_2)
                 .apiInfo(apiInfo())
                 .enable(flag)//是否启用Swagger,false则不启用
    }
    

    分组以及注释:

    分组管理:

      通过groupName("")配置多个Docket,(在多人开发中,每个开发者配置一个自己的Swagger,方便管理)

    @Bean
    public Docket docket1() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("test1");
    }
    @Bean
    public Docket docke2() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("test2");
    }
    @Bean
    public Docket docket3() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("test3");
    }
    

    Swagger常用注解:

    controller中:

     @Api(tags = "请求控制类")  // 给controller类加注释

     @ApiOperation("用户赋值请求")  //给controller请求加注释

    pojo实体类中:

      @ApiModel("用户类")  // 标注类的信息

     @ApiModelProperty("用户名")  // 标注属性信息

    public String username;

    swagger 测试:

      controller请求:

     @ApiOperation("用户赋值请求")
     @RequestMapping("/user")
     public User getUser1(User user) {
         return user;
     }
    

  • 相关阅读:
    返回三级联动的JSON数据
    返回三级联动的JSON数据
    python3访问map
    第十八讲、中介者模式
    第十七讲、命令模式
    第十六讲、模板方法模式
    第十五讲、组合模式
    第十四讲、享元模式
    第十三讲、装饰器模式
    第十二讲、桥接模式
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/14348822.html
Copyright © 2011-2022 走看看