一、为什么使用Swagger
在实际开发中我们作为后端总是给前端或者其他系统提供接口,每次写完代码之后不可避免的都需要去写接口文档,首先写接口文档是一件繁琐的事,其次由接口到接口文档需要对字段、甚至是排版等。再加上如果我们是为多个系统提供接口时可能还需要按照不同系统的要求去书写文档,那么有没有一种方式让我们在开发阶段就给前端提供好接口文档,甚至我们可以把生成好的接口文档暴露出去供其他系统调用,那么这样我只需要一份代码即可。
二、SpringBoot中如何使用Swagger
第一步:在pom.xml中引入依赖,请注意如果只是使用Swagger官方提供的UI界面的话只需要引入前2个依赖即可,第三个依赖是Github开源的一款基于SwaggerUI开发的另外一套接口UI界面,后面会介绍到。
第二步:众所周知SpringBoot中引入依赖后第二步应该就是进行配置,因此我们需要新建一个配置文件对Swagger进行配置,先了解下Swagger的核心配置即docket,我们来看下源码,由上面的注释可以看到Docket是为SpringMvc提供的默认和便捷配置。因此我们在配置文件中需要对docket进行配置。
上面的配置类上需要开启Swagger因此加了@EnableSwagger2注解,其次上面提到的Docket配置的时候是作为一个Bean来配置的 。DocumentType为要使用的Swagger类型,这里使用2.0,接下来apiInfo用来指定api文档概要,接下来用来指定要为哪些Controller来指定生成接口文档,之后进行build。下面看下apiInfo,里面主要是配置一些文档的标题、联系人等。
第三步:接下来我们需要对Controller进行配置,首先在需要生成接口文档的Controller上加上@Api注解该注解表示该Controller需要生成文档,当然我们还可以指定在该Controller中的某个方法生成接口文档,如下图所示:
最主要看下三个红色箭头,第一个注解中的参数是为了描述该Controller具体实现什么功能,第二个箭头@ApiOpration是加在方法上的注解,表示该方法是用来生成接口文档,同时该接口名为用户名是否存在,httpMethod用来指定该接口请求方式,必须下面的@GetMapping一致,如果是Post请求的话HttpMethod就为POST。看到此处你可能有疑问如果我某个Controller不想让他里面的方法生成接口文档,我该怎么指定,很简单直接在该Controller上加@ApiIgnore标识忽略该Controller(不生成接口文档)
传输实体类如何指定:举个例子前端给我们传过来的数据我们在接收的时候可能通过@RequestParam来接收,但是如果参数比较多的话还这样接收的话很明显会很麻烦,因此我们可以封装到一个实体类中如UserInfo,UserInfo里面将前端传给我们的值进行封装,在接收的时候就直接用UserInfo来接收,那么问题来了如果我们在生成接口文档的时候如果把UserInfo这样的传输类进行声明呢?也很简单来看下图示例:主要来说一下如果在这个封装类中某个参数不是必输的那么可以在required指定为flase
三、效果演示
看了上面的文字和代码描述你是不是一头雾水,没关系看下我们通过上面的各种配置、注解之后Swagger会为我们生成一个什么样的接口文档,Swagger默认访问路径为http://localhost:port/swagger-ui.html后面是固定的前面根据你自己的ip和端口指定
上图的电商平台接口Api对应的就是我们配置类中docket中的apiInfo配置那些信息,下面的Controller如用于注册登录的相关接口不正是我们在Controller上@Api注解中指定的文字描述嘛。点开某个Controller接口后可以看到Controller中你定义的接口,我们就以最后一个查询用户名是否存在接口为例点开。
由上图可以看到Model Schema是我们指定返回格式的model样式,下面的Parameters即为前端请求的参数,因此我们可以看到Swagger是可以让我们来模拟前端发起请求的,username即为前端需要请求的字段,填写完毕后点击Try it out 表示立即测试,点击之后就可以看到返回结果。这就相当于前端发请求到后端后端返给前端的数据(一般是Json串),为了方便我们输入一个库中存在的用户名来Try it out, 我截取返回部分中有用的三处来示例
RequestRul:前端请求后端的路由
Response Body: 后端返给前端的数据
Response Code: 请求状态
四、另外UI的展示
上面图形UI是Swagger为我们提供的默认的UI样式,除此之外还有另外一种形式UI可以供我们使用,之前的配置类以及Controller上面的@Api这些都不需要变,唯一改变的是我们访问的路径,之前是swagger-ui.html现在将其替换为doc.html,访问之后展示页面如下所示:可以看到和Swagger为我们提供的默认的展示UI有一定差异,这种展示是将你的接口显示在左侧,右侧显示接口描述,两种风格的展示功能是一致的,只是形式不同,具体选择哪种根据个人爱好即可。