前言
随着项目架构的演化,前后端分离是不可阻挡的趋势。这种模式的协作在实践的过程中经常会遇到的一个问题就是文档。
在《一位CTO告诉我,项目中至少需要这3类文档》一文我们已经描述了文档的重要性,而接口文档便是其中之一,可以说是必不可少的。
但编写接口文档对开发人员来说是一大难题,而且接口还在不断的变化,还要花费精力去维护接口文档的更新。
既然存在痛点,那么必须会出现解决此痛点的产品,这就是Swagger,目前已经更新到Swagger3版本了。如果你还停留在Swagger2,建议升级到Swagger3,整体UI风格及交互友好了不少。
本篇将围绕Swagger3与SpringBoot的集成和离线文档的生成来进行讲解。
Swagger简介
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。
官网:swagger.io
Swagger解决的痛点
传统方式提供文档有以下痛点:
- 接口众多,实现细节复杂,编写文档耗费费力,需要持续维护;
- 接口文档需要随时进行同步;
- 接口返回的结果不明确,得构造返回结构体等;
- 不能直接在线测试接口,通常需要额外的工具,比如PostMan等。
当引入Swagger之后,以上痛点迎刃而解,同时还带来以下优点:
- 及时性 (接口变更后,前后端人员可实时看到最新版本)
- 规范性 (接口具体统一风格,如接口地址,请求方式,参数,响应格式和错误信息等)
- 一致性 (接口信息一致,不会因接口文档版本问题出现分歧)
- 可测性 (可直接基于接口文档进行测试)
Swagger3的改变
Swagger3.0的改动,官方文档总结如下几点:
- 删除了对springfox-swagger2的依赖;
- 删除所有@EnableSwagger2…注解;
- 添加了springfox-boot-starter依赖项;
- 移除了guava等第三方依赖;
- 文档访问地址改为http://ip:port/project/swagger-ui/index.html。
下面就来实战使用一下吧。
SpringBoot集成Swagger3
SpringBoot集成Swagger3与SpringBoot集成其他框架的套路基本一致,通常包括:引入依赖、指定配置文件、创建配置类和使用。
引入依赖
在SpringBoot项目的pom.xml中引入Swagger3依赖:
1 | xml复制代码<dependency> |
指定配置文件
通常情况下swagger只能在开发环境或测试环境下开启,生产环境下需要进行关闭的。而swagger的开启与关闭可在application.properties中进行配置:
1 | ini复制代码# 生产环境需设置为false |
配置类
通过@EnableOpenApi注解启动用Swagger的使用,同时在配置类中对Swagger的通用参数进行配置。
1 | less复制代码@Configuration |
通过以上配置已经完成了Spring Boot与Swagger的集成,下面展示一下如何在业务逻辑中进行使用。
业务中使用
创建两个实体类Goods(商品类)和CommonResult(通用返回结果类)。
Goods类:
1 | kotlin复制代码@ApiModel("商品模型") |
CommonResult类:
1 | kotlin复制代码@ApiModel("API通用数据") |
下面针对Controller层的接口来使用Swagger对应的API。
GoodsController类:
1 | less复制代码@Api(tags = "商品信息管理接口") |
OrderController类:
1 | less复制代码@Api(tags = "订单管理接口") |
展示效果
完成集成,启动SpringBoot项目,在访问地址:
1 | arduino复制代码http://127.0.0.1:8080/swagger-ui/index.html |
从整体上可以看到如下效果:
具体的商品信息管理接口,可以看到请求参数、返回结果数据结构等信息,点击“Try it out”,可输入参数请求参数,进行接口的调用:
调用之后会返回对应的处理结果:
在最下面的Schemas中还可以看到对应返回结果数据和被Swagger注解的实体类信息。
Swagger3注解使用说明
经过上述实例之后,我们知道大多数API是如何使用的了,这了再汇总一下相关API的功能:
1 | less复制代码@Api:用在请求的类上,表示对类的说明 |
导出离线文档
Swagger为我们提供了方便的在线文档支持,但某些场景下我们需要把接口文档提供给合作人员,而不是直接给一个地址。此时,我们就需要将接口文档导出为离线文档。
这里我们集成增强文档knife4j来实现离线文档的导出。
添加knife4j依赖
在pom.xml中增加knife4j的依赖:
1 | xml复制代码<dependency> |
启动knife4j
在上面配置Swagger的Swagger3Config中添加@EnableKnife4j注解,该注解可以开启knife4j的增强功能。
1 | less复制代码@EnableKnife4j |
此时,如果依旧访问http://localhost:8080/swagger-ui/index.html 会发现显示并没有变化。这里我们需要访问http://localhost:8088/doc.html。
整个项目源码地址:github.com/secbr/sprin…
展示效果
此时启动项目,访问doc.html之后,你会发现现在文档风格变得非常酷炫。展示几个效果图来看看:
其中在“离线文档”一栏中可以看到四种形式的离线文档下载:Markdown、HTML、Word、OpenAPI。
其中个人感觉HTML格式的文档更具有没敢,也更方便查看,来一张图看看效果。
小结
文档是项目中必须的,但随着开源框架的发展,对技术人员来说文档的痛点也在逐步解决。如果你还处于手写文档的阶段,真的可以尝试一下这类更友好的文档展现形式。
发掘新事物,尝试新鲜事物,才能更快的成长,有更多的Plan B。
博主简介:《SpringBoot技术内幕》技术图书作者,酷爱钻研技术,写技术干货文章。
公众号:「程序新视界」,博主的公众号,欢迎关注~
技术交流:请联系博主微信号:zhuan2quan
本文转载自: 掘金