swagger是什么
前言:
swagger:神气十足,大摇大摆
在用Springboot进行开发时,有的实体类上用到了注解@ApiModelProperty("接受人代码"),特此整理此注解的出处及作用。
说白了,swagger就是为了方便系统生成API文档。而ApiModel与ApiModelProperty都是swagger的注解。
一、swagger是什么
1、是一款让你更好的书写API文档的规范且完整框架。
2、提供描述、生产、消费和可视化RESTful Web Service。
3、是由庞大工具集合支撑的形式化规范。这个集合涵盖了从终端用户接口、底层代码库到商业API管理的方方面面。
参看swagger学习链接:https://www.e-learn.cn/content/qita/1542698
二、Swagger有什么用
swagger是一个流行的API开发框架,这个框架以“开放API声明”(OpenAPI Specification,OAS)为基础,对整个API的开发周期都提供了相应的解决方案,是一个非常庞大的项目(包括设计、文档以及测试和部署,几乎支持所有语言)。
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。
三、SpringBoot 与 Swagger2
由于java的强大的注解功能,我们使用SpringBoot来结合Swagger2,在使用起来非常简单.
由于Spring的流行,Marty Pitt编写了一个基于Spring的组件swagger-springmvc,用于将swagger集成到springmvc中来。
Springfox的前身是swagger-springmvc,是一个开源的API doc框架,可以将我们的Controller的方法以文档的形式展现。
springfox大致原理:
springfox的大致原理就是,在项目启动的过程中,spring上下文在初始化的过程,框架自动根据配置加载一些swagger相关的bean到当前的上下文中,并自动扫描系统中可能需要生成api文档那些类,并生成相应的信息缓存起来。如果项目MVC控制层用的是springMvc那么会自动扫描所有Controller类,并生成对应的文档描述数据。该数据是json格式,通过路径:项目地址/ v2/api-docs可以访问到该数据,然后swaggerUI根据这份数据生成相应的文档描述界面。因为我们能拿到这份数据,所以我们也可以生成自己的页面.
参看链接:
https://blog.csdn.net/jamieblue1/article/details/99847744
https://blog.csdn.net/weixin_37509652/article/details/80094370
四、重新认识Swagger与springfox
做过Java后端开发的同学应该都用使用过Springfox和Swagger,但我相信很多同学都对这两个工具的理解和使用都有问题。
4.1 Swagger是什么
根据官网的介绍,Swagger是一系列用于Restful API开发的工具,开源的部分包括:
- OpenAPI Specification:API规范,规定了如何描述一个系统的API
- Swagger Codegen:用于通过API规范生成服务端和客户端代码
- Swagger Editor:用来编写API规范
- Swagger UI:用于展示API规范
非开源的部分包括:
- Swagger Hub:云服务,相当于Editor + Codegen + UI
- Swagger Inspector:手动测试API的工具
- SoapUI Pro:功能测试和安全测试的自动化工具
- LoadUI Pro:压力测试和性能测试的自动化工具
4.2 Springfox是什么
在大量的中文教程中,Springfox以这样的方式出现
<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>
第二个看起来应该是springfox封装/修改的Swagger UI,第一个应该就是Springfox本体了,但为什么artifact有个swagger2的后缀?
这就要从Springfox是什么说起了。Springfox其实是一个通过扫描代码提取代码中的信息,生成API文档的工具
。API文档的格式不止Swagger的OpenAPI Specification
,还有RAML
,jsonapi
,Springfox的目标同样包括支持这些格式。这就能解释那个swagger2的后缀了,这只是Springfox对Swagger的支持。
在Swagger的教程中,都会提到@Api
、@ApiModel
、@ApiOperation
这些注解,这些注解其实不是Springfox的,而是Swagger
的。springfox-swagger2
这个包依赖了swagger-core
这个包,而这些注解正是在这里面。但是,swagger-core
这个包是只支持JAX-RS2
的,并不支持常用的Spring MVC
。这就是springfox-swagger
的作用了,它将上面那些用于JAX-RS2
的注解适配到了Spring MVC
上。
除了Spring MVC外,Springfox还支持如下库
Spring Data REST
JSR 303
,这项标准的参考实现是Hibernate Validator
4.3 Swagger注解的滥用
在代码中的注解已经存储了大量的信息,如果再用swagger-core
的注解将这些信息用另一种方式表达出来,很容易造成改了这里忘了改那里,即修改不同步。因此Springfox的开发者不推荐大家使用swagger-core
的注解来描述API,认为swagger-core
的注解只是补充,只能用于实现其他方法都不能实现的调整或者覆盖。例如,更应该使用Jackson
的注解,而不是@ApiModelProperty
;更应该使用@NotNull
或者@RequestParam#required
,而不是在文档里写一句此字段必填
。
但是,springfox的开发者忽略了一个事实,中文开发者用swagger-core
的注解更多的是用来添加中文描述
,所以,该用的时候还是用吧。
参看链接:https://www.cnblogs.com/jason1990/p/12581773.html
五、@ApiModel和@ApiModelProperty用法
5.1@ApiModel
使用场景:在实体类上边使用,标记类是swagger的解析类。
概述:提供有关swagger模型的其它信息,类将在操作中用作类型时自动内省。
用法:
5.2 @ApiModelProperty
使用场景:使用在被 @ApiModel 注解的模型类的属性上。表示对model属性的说明或者数据操作更改 。
概述:添加和操作模型属性的数据。
用法:
@ApiModel(value="user对象",description="用户对象user") public class User implements Serializable{ private static final long serialVersionUID = 1L; @ApiModelProperty(value="用户名",name="username",example="xingguo") private String username; @ApiModelProperty(value="状态",name="state",required=true) private Integer state; private String password; private String nickName; private Integer isDeleted; @ApiModelProperty(value="id数组",hidden=true) private String[] ids; private List<String> idList; //省略get/set }
参看链接:
https://blog.csdn.net/weixin_39189376/article/details/97926012
https://www.cnblogs.com/huanghuanghui/p/9086860.html
在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。