1.Swagger
1.1 介绍
Swagger 是一个规范和完整的Web API框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
功能主要包含以下几点:
A. 使得前后端分离开发更加方便,有利于团队协作;
B. 接口文档在线自动生成,降低后端开发人员编写接口文档的负担;
C. 接口功能测试;
1.2 项目集成Swagger
- 引入swagger依赖;
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
- 定义swagger配置类;
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket buildDocket() {
//构建在线API概要对象
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(buildApiInfo())
.select()
// 要扫描的API(Controller)基础包
.apis(RequestHandlerSelectors.basePackage("com.stock.Controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo buildApiInfo() {
//网站联系方式
Contact contact = new Contact("联系人","联系人网站","联系人邮箱");
return new ApiInfoBuilder()
.title("在线接口API文档")//文档标题
.description("这是一个方便前后端开发人员快速了解开发接口需求的在线接口API文档")//文档描述信息
.contact(contact)//站点联系人相关信息
.version("1.0.0")//文档版本
.build();
}
}
- swagger扫描管理的web资源路径;
@SpringBootApplication
@MapperScan("com.stock.mapper")
public class StockApp {
public static void main(String[] args) {
SpringApplication.run(StockApp.class, args);
}
}
- 配置项目文档标题、描述、版本等信息、官网地址等信息;
- 通过swagger注解给指定资源添加描述信息;
- 项目启动,访问并测试在线资源;
1.3 Swagger注解
注解 | 位置 | 说明 |
---|---|---|
@Api | 类 | 加载Controller类上,表示对类的说明 |
@ApiModel | 类(通常是实体类) | 描述实体类的作用,通常表示接口接收参数的实体对象 |
@ApiModelProperty | 属性 | 描述实体类的属性,(用对象接收参数时,描述对象的一个字段) |
@ApiOperation | 方法 | 说明方法的用途、作用 |
@ApiImplicitParams | 方法 | 表示一组参数说明 |
@ApiImplicitParam | 方法 | 用在@ApiImplicitParams注解中,指定一个请求参数的各个方面的属性 |
@ApiParam | 方法入参或者方法之上 | 单个参数的描述信息,描述form表单、url参数 |
@ApiImplicitParam注解详解:
属性 | 取值 | 作用 |
---|---|---|
paramType | 查询参数类型 | |
path | 以地址的形式(rest风格)提交数据 | |
query | 直接跟参数完成自动映射赋值(/add/user?name=zhangsan) | |
body | 以流的形式提交 仅支持POST | |
header | 参数在request headers 里边提交 | |
form | 以form表单的形式提交 仅支持POST | |
dataType | 参数的数据类型 只作为标志说明,并没有实际验证 | |
Long | ||
String | ||
name | 接收参数名(方法入参的名称) | |
value | 接收参数的意义描述(描述信息) | |
required | 参数是否必填 | |
true | 必填 | |
false | 非必填 | |
defaultValue | 默认值 |
其它注解:
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息
举个例子:
@RestController
@RequestMapping("/api")
@Api(value = "用户认证相关接口定义",tags = "用户功能-用户登录功能")
public class UserController {
/**
* 注入用户服务bean
*/
@Autowired
private UserService userService;
/**
* 根据用户名查询用户信息
* @param userName
* @return
*/
@GetMapping("/{userName}")
@ApiOperation(value = "根据用户名查询用户信息",notes = "用户信息查询",response = SysUser.class)
@ApiImplicitParam(paramType = "path",name = "userName",value = "用户名",required = true)
public SysUser getUserByUserName(@PathVariable("userName") String userName){
return userService.getUserByUserName(userName);
}
/**
* 用户登录功能接口
* @param vo
* @return
*/
@PostMapping("/login")
@ApiOperation(value = "用户登录功能",notes = "用户登录",response = R.class)
public R<LoginRespVo> login(@RequestBody LoginReqVo vo){
return userService.login(vo);
}
/**
* 生成登录校验码的访问接口
* @return
*/
@GetMapping("/captcha")
@ApiOperation(value = "验证码生成功能",response = R.class)
public R<Map> getCaptchaCode(){
return userService.getCaptchaCode();
}
}
2.Knife4j
2.1 Knife4j介绍
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!
核心功能
该UI增强包主要包括两大核心功能:文档说明 和 在线调试
- 文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。
- 在线调试:提供在线接口联调的强大功能,自动解析当前接口参数,同时包含表单验证,调用参数可返回接口响应内容、headers、Curl请求命令实例、响应时间、响应状态码等信息,帮助开发者在线调试,而不必通过其他测试工具测试接口是否正确,简介、强大。
- 个性化配置:通过个性化ui配置项,可自定义UI的相关显示信息
- 离线文档:根据标准规范,生成的在线markdown离线文档,开发者可以进行拷贝生成markdown接口文档,通过其他第三方markdown转换工具转换成html或pdf,这样也可以放弃swagger2markdown组件
- 接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接
2.2 项目集成
- 添加依赖:
<!--knife4j的依赖-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
<!--支持接口参数校验处理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 在swagger配置类添加knife4j配置:
@Configuration
@EnableSwagger2
@EnableKnife4j
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfiguration {
//.....其它不变......
}
- 注解说明
注解 | 说明 |
---|---|
@EnableSwagger2 | 该注解是Springfox-swagger框架提供的使用Swagger注解,该注解必须加 |
@EnableKnife4j | 该注解是knife4j 提供的增强注解,Ui提供了例如动态参数、参数过滤、接口排序等增强功能,如果你想使用这些增强功能就必须加该注解,否则可以不用加 |
- 访问在线文档资源**:http://localhost:8091/doc.html
3.Yapi
3.1 Yapi介绍
YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。
YApi让接口开发更简单高效,让接口的管理更具可读性、可维护性,让团队协作更合理。
简单就是把api搭建在服务器上,大家可以随时看
3.2 Yapi安装
安装mongo数据库:
# 拉取mongo镜像,当然一位内部包比较大,直接导入资料包中的镜像资源即可
docker pull mongo
# 安装mongo数据库服务
# 创建存储卷
docker volume create mongo-data
# 启动 MongoDB
docker run -d \
--name mongo-yapi \
-v mongo-data:/data/db \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=anoyi \
-e MONGO_INITDB_ROOT_PASSWORD=anoyi.com \
mongo
初始化yaml的管理员账号和密码:
# 拉取yapi镜像包
docker pull registry.cn-hangzhou.aliyuncs.com/anoyi/yapi
# 自定义名称为config.json的配置文件
{
"port": "3000",
"adminAccount": "admin@anoyi.com",
"timeout":120000,
"db": {
"servername": "mongo",
"DATABASE": "yapi",
"port": 27017,
"user": "anoyi",
"pass": "anoyi.com",
"authSource": "admin"
}
}
# 初始化管理员账户和密码
docker run -it --rm \
--link mongo-yapi:mongo \
--entrypoint npm \
--workdir /yapi/vendors \
-v $PWD/config.json:/yapi/config.json \
registry.cn-hangzhou.aliyuncs.com/anoyi/yapi \
run install-server
最后初始化yaml容器:
docker run -d \
--name yapi \
--link mongo-yapi:mongo \
--workdir /yapi/vendors \
-p 3000:3000 \
-v $PWD/config.json:/yapi/config.json \
registry.cn-hangzhou.aliyuncs.com/anoyi/yapi \
server/app.js
记得记住访问路径和账号密码
注意:重启yapi服务时,需要同时启动mongo服务,可通过 docker start mongo-yapi yapi 启动
3.3 Yapi基本使用
登录到Yapi平台之后,我们可以创建项目,在项目下创建接口分类,在对应的分类中添加接口。
- 创建项目
- 添加分类
- 添加接口
- 运行接口
3.3.1 Yapi自动同步swagger
3.3.2 Yapi接口导入导出
在Yapi平台中我们不仅可以在线阅读文档,还可以将Yapi中维护的文档直接导出来,可以导出md,json,html格式,在导出时自行选择即可;
我们也可以将外部的接口文档导入到Yapi的平台中,这样我们就不用一个接口一个接口的添加了;
我们可以将课程资料中提供的json格式的接口文档直接导入Yapi平台中来(文档可通过swagger下载);