zoukankan      html  css  js  c++  java
  • Spring Boot中使用Swagger2构建RESTful API文档

      在开发rest api的时候,为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题:

      1.由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。

      2.随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。

      为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档

      要使用Swagger2,首先要引入Swagger2的依赖:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.2.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.2.2</version>
    </dependency>

      然后在springboot应用程序中创建Swagger2配置类:

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket createRestApi(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.ysl.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("Spring Boot中使用Swagger2构建RESTful APIs")
                    .description("使用Swagger2创建rest api文档")
                    .termsOfServiceUrl("http://www.cnblogs.com/senlinyang")
                    .contact("ysl")
                    .version("V1.0")
                    .build();
        }
    }

      在上述配置类中,通过@Configuration注解,让Spring来加载该类配置。再通过@EnableSwagger2注解来启用Swagger2。再通过createRestApi函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中)。select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现,本例采用指定扫描的包路径来定义,Swagger会扫描该包下所有Controller定义的API,并产生文档内容(除了被@ApiIgnore指定的请求)。

      在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。如下所示,我们通过@ApiOperation注解来给API增加说明、通过@ApiImplicitParams@ApiImplicitParam注解来给参数增加说明:

    @RestController
    public class TestController {
    
        @Autowired
        private User user;
    
        @ApiOperation(value = "获取员工列表",notes = "")
        @ApiImplicitParam(name = "parm", value = "参数", required = true, dataType = "String")
        @PostMapping(value = "/getUsers")
        public ResponseEntity<JsonResult> getEmplsByOrgCode(String parm){
            JsonResult result = new JsonResult();
            System.out.println(parm);
    
            List<UserInfo> infos = new ArrayList<>();
            infos.add(getUserInfo());
            result.setContent(infos);
            result.setResult(true);
            return ResponseEntity.ok(result);
        }
    
        private UserInfo getUserInfo(){
            UserInfo user = new UserInfo();
            user.setAccountName("zqyang2");
            user.setCompanyCode("01");
            user.setCompanyEasId("UUk7nZNlR/WkDxQRNZZ2i8znrtQ=");
            return user;
        }
    }

      完成上述代码添加上,启动Spring Boot程序,访问:http://localhost:8080/swagger-ui.html

      就能看到前文所展示的RESTful API的页面。我们可以再点开具体的API请求,以POST类型的/getUsers请求为例,可找到上述代码中我们配置的Notes信息以及参数getUsers的描述信息,如下图所示。

      

      在上图请求的页面中,我们看到param的Value是个输入框?是的,Swagger除了查看接口功能外,还提供了调试测试功能,我们可以点击上图中右侧的Model Schema(黄色区域:它指明了User的数据结构),此时Value中就有了user对象的模板,我们只需要稍适修改,点击下方“Try it out!”按钮,即可完成了一次请求调用!

  • 相关阅读:
    第七周学习进度
    环形数组求子数组最大和
    第六周学习进度
    团队
    子数组和最大值
    第五周学习进度
    第四周学习进度
    构建之法第一篇阅读笔记
    关于Sublime text 的PHP编译环境配置的问题
    PHP基础之 数组(二)
  • 原文地址:https://www.cnblogs.com/senlinyang/p/8651247.html
Copyright © 2011-2022 走看看