Swagger-UI
完成了用户中心接口的开发,接下来我们就要测试自己的接口了,而且为了方便前段调用和参考,我们最好提供一份更直观的api文档,这里我们介绍一个工具,叫做swagger-ui
什么是swagger呢?swagger是对Open-API的一种实现。那么,什么是OpenAPI呢?
1.什么是OpenAPI
随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、前后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。 前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要。
没有API文档工具之前,大家都是手写API文档的,在什么地方书写的都有,而且API文档没有统一规范和格式,每个公司都不一样。这无疑给开发带来了灾难。
OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程。目前V3.0版本的OpenAPI规范已经发布并开源在github上 。
官网:https://github.com/OAI/OpenAPI-Specification
2.什么是swagger?
丝袜哥
OpenAPI是一个编写API文档的规范,然而如果手动去编写OpenAPI规范的文档,是非常麻烦的。而Swagger就是一个实现了OpenAPI规范的工具集。
看官方的说明:
Swagger包含的工具集:
-
Swagger编辑器: Swagger Editor允许您在浏览器中编辑YAML中的OpenAPI规范并实时预览文档。
-
Swagger UI: Swagger UI是HTML,Javascript和CSS资产的集合,可以从符合OAS标准的API动态生成漂亮的文档。
-
Swagger Codegen:允许根据OpenAPI规范自动生成API客户端库(SDK生成),服务器存根和文档。
-
Swagger Parser:用于解析来自Java的OpenAPI定义的独立库
-
Swagger Core:与Java相关的库,用于创建,使用和使用OpenAPI定义
-
Swagger Inspector(免费): API测试工具,可让您验证您的API并从现有API生成OpenAPI定义
-
SwaggerHub(免费和商业): API设计和文档,为使用OpenAPI的团队构建。
3.快速入门
SpringBoot已经集成了Swagger,使用简单注解即可生成swagger的API文档。
3.1.引入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
3.2.编写配置
package com.leyou.user.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.host("localhost:8085")
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.leyou.user.web"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("乐优商城用户中心")
.description("乐优商城用户中心接口文档")
.version("1.0")
.build();
}
}
3.3.启动测试
重启服务,访问:http://localhost:8085/swagger-ui.html
就能看到swagger-ui为我们提供的API页面了:
可以看到我们编写的4个接口,任意点击一个,即可看到接口的详细信息:
可以看到详细的接口声明,包括:
-
请求方式:
-
请求路径
-
请求参数
-
响应等信息
点击右上角的try it out!
还可以测试接口:
填写参数信息,点击execute,可以发起请求并测试:
4.自定义接口说明
刚才的文档说明中,是swagge-ui根据接口自动生成,不够详细。如果有需要,可以通过注解自定义接口声明。常用的注解包括:
/**
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数
*/
示例:
/**
* 校验数据是否可用
* @param data
* @param type
* @return
*/
@GetMapping("/check/{data}/{type}")
@ApiOperation(value = "校验用户名数据是否可用,如果不存在则可用")
@ApiResponses({
@ApiResponse(code = 200, message = "校验结果有效,true或false代表可用或不可用"),
@ApiResponse(code = 400, message = "请求参数有误,比如type不是指定值")
})
public ResponseEntity<Boolean> checkUserData(
@ApiParam(value = "要校验的数据", example = "lisi") @PathVariable("data") String data,
@ApiParam(value = "数据类型,1:用户名,2:手机号", example = "1") @PathVariable(value = "type") Integer type) {
return ResponseEntity.ok(userService.checkData(data, type));
}
查看文档: