前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小家Spring】借助Springfox整合SpringBoot和Swagger(API接口神器)

【小家Spring】借助Springfox整合SpringBoot和Swagger(API接口神器)

作者头像
YourBatman
发布2019-09-03 15:07:02
8050
发布2019-09-03 15:07:02
举报
文章被收录于专栏:BAT的乌托邦BAT的乌托邦

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/f641385712/article/details/84064122

背景

随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远

前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要,swagger就是一款让你更好的书写API文档的框架。

没有API文档工具之前,大家都是手写API文档的,在什么地方书写的都有,有在confluence上写的,有在对应的项目目录下readme.md上写的,每个公司都有每个公司的玩法,无所谓好坏(其实相比于Swagger,都不好)。

书写API文档的工具有很多,但是能称之为“框架”的,估计也只有swagger了。

swagger的生态使用图
在这里插入图片描述
在这里插入图片描述
Springfox解释

swagger是一个流行的API开发框架,这个框架以“开放API声明”(OpenAPI Specification,OAS)为基础,对整个API的开发周期都提供了相应的解决方案,是一个非常庞大的项目(包括设计、编码和测试,几乎支持所有语言)。

由于Spring的流行,Marty Pitt编写了一个基于Spring的组件swagger-springmvc,用于将swagger集成到springmvc中来。而springfox则是从这个组件发展而来,同时springfox也是一个新的项目,本文仍然是使用其中的一个组件springfox-swagger2。

pringfox-swagger2依然是依赖OSA规范文档,也就是一个描述API的json文件,而这个组件的功能就是帮助我们自动生成这个json文件,我们会用到的另外一个组件springfox-swagger-ui就是将这个json文件解析出来,用一种更友好的方式呈现出来。

Swagger是一款 RESTful接口的文档在线自动生成、功能测试功能框架。一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful风格的Web服务,加上 swagger-ui,可以有很好的呈现。

与SpringBoot集成的步骤

第一步:导入依赖(本文采用SpringBoot2+springfox2.9.2版本)

代码语言:javascript
复制
		<-- boot相关依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

		<!--整合swagger-->
        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
        <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>

第二步:书写SwaggerConfig配置文件

代码语言:javascript
复制
/**
 * @author fangshixiang
 * @description
 * @date 2018-11-14 10:48
 */
@EnableSwagger2 //开启springfox的Swagger2
@Configuration
//@Profile("dev") //只有在测试环境才开启Swagger
public class SwaggerConfig {

    //是否开启swagger,正式环境一般是需要关闭的,可根据springboot的多环境配置进行设置
    //若配置类上写了使用了@Profile 也可以达到类似效果 二选一 此处默认值为true
    @Value(value = "${swagger.enable:true}")
    private Boolean swaggerEnable;

    /**
     * 创建一个Docket 并且注册到Spring容器里即可完成配置
     *
     * @return Docket
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                //是否开启
                .enable(swaggerEnable)
                //设置API描述信息
                .apiInfo(apiInfo())
                .select()
                //扫描的的包 一般定位到controller那即可(若有接口层,此处报名需要注意)
                .apis(RequestHandlerSelectors.basePackage("com.fsx.run2.controller"))
                // 指定路径处理:PathSelectors.any()代表所有的路径
                // 也可以指定某些接口不要对外暴露 这里定义一些规则就行 如正则表达式
                .paths(PathSelectors.any())
                .build()
                //base,最终调用接口后会和paths拼接在一起
                .pathMapping("/");
    }

    //设置API信息 一些简单的描述信息而已
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("API Document for 自定义服务名")
                .description("API描述信息")
                .contact(new Contact("Fangshixiang", "https://www.baidu.com", "shixiangfang@aliyun.com"))
                .version("1.0.0")
                .build();
    }

}

第三步:书写测试的Controller类

代码语言:javascript
复制
@RestController
@RequestMapping("/demo")
@Api(tags = "Demo API接口文档")
public class DemoController {

    @ApiOperation("根据id获取一条记录")
    @GetMapping("/{id}")
    Object getById(@PathVariable Integer id) {
        return id;
    }

}

最后,启动项目,访问:http://localhost:8080/swagger-ui.html

在这里插入图片描述
在这里插入图片描述

这样,API文档就自动生成了,我们只需要把这个连接发给前端,前端就能对API接口的相关数据结构一目了然,体验非常好

在这里插入图片描述
在这里插入图片描述

强烈建议在生产环境关闭 swagger,避免不必要的漏洞暴露!

Springfox简单原理

在前言中,我们知道,我们的第一个任务就是生成一个满足OSA规范的json文件(当然,创建一个spring的项目就不说了)。对于这个任务,springfox为我们提供了一个Docket(摘要的意思)类,我们需要把它做成一个Bean注入到spring中,显然,我们需要一个配置文件,并通过一种方式(显然它会是一个注解)告诉程序,这是一个Swagger配置文件。

这就是Springfox的强大之处,他启动时候回去扫描包下的controller,然后组装成json,然后放在内存里。最后提供UI界面直接访问即可,非常方便。

Swagger其余小组件介绍
swagger-editor(需要单独安装在操作系统上,使用较少)

就是一个在线编辑文档说明文件(swagger.json或swagger.yaml文件)的工具,以方便生态中的其他小工具(swagger-ui)等使用。 左边编辑,右边立马就显示出编辑内容来。

在这里插入图片描述
在这里插入图片描述
swagger-codegen

代码生成器,脚手架。可以根据swagger.json或者swagger.yml文件生成指定的计算机语言指定框架的代码。 有一定用处,Java系用的挺多。 对于从来不喜欢自动生成代码的我,觉得鸡肋

swagger-validator

这个小工具是用来校验生成的文档说明文件是否符合语法规定的。用法非常简单,只需url地址栏,根路径下加上一个参数url,参数内容是放swagger说明文件的地址。即可校验。

最后

Swagger在分布式环境下,可以结合网关聚合API文档,具体参考: 利用swagger2聚合API文档 聚合API文档在开放过程中,可以大大提高效率,值得推荐

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年11月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • swagger的生态使用图
  • Springfox解释
  • 与SpringBoot集成的步骤
  • Springfox简单原理
  • Swagger其余小组件介绍
    • swagger-editor(需要单独安装在操作系统上,使用较少)
      • swagger-codegen
        • swagger-validator
        • 最后
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档