概述
OpenAPI 介绍
随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、前后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。 前端和后端的唯一联系,变成了API接口;API 文档变成了前后端开发人员联系的纽带,变得越来越重要。
没有 API 文档工具之前,大家都是手写 API 文档的,在什么地方书写的都有,而且 API 文档没有统一规范和格式,每个公司都不一样。这无疑给开发带来了灾难。
OpenAPI 规范(OpenAPI Specification 简称OAS)是 Linux 基金会的一个项目,试图通过定义一种用来描述 API 格式或 API 定义的语言,来规范 RESTful 服务开发过程。目前 V3.0 版本的 OpenAPI 规范已经发布并开源在 github 上 。
源码:https://github.com/OAI/OpenAPI-Specification
swagger 介绍
OpenAPI 是一个编写 API 文档的规范,然而如果手动去编写 OpenAPI 规范的文档,是非常麻烦的。而 Swagger 就是一个实现了OpenAPI 规范的工具集。
官网:https://swagger.io/
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的团队构建。
快速入门案例
SpringBoot 已经集成了 Swagger,使用简单注解即可生成 swagger 的 API 文档。
引入依赖
编写配置
启动测试
重启服务,访问:http://localhost:8085/swagger-ui.html
就能看到 swagger-ui 提供的API页面了:
可以看到编写的4个接口,任意点击一个,即可看到接口的详细信息:
可以看到详细的接口声明,包括:
- 请求方式:
- 请求路径
- 请求参数
- 响应等信息
点击右上角的try it out!
还可以测试接口:
填写参数信息,点击execute,可以发起请求并测试:
自定义接口
概述
swagge-ui 根据接口自动生成文档说明,不够详细。如果有需要,可以通过注解自定义接口声明。
常用的注解包括:
- @Api:修饰整个类,描述Controller的作用
- @ApiOperation:描述一个类的一个方法,或者说一个接口
- @ApiParam:单个参数描述
- @ApiModel:用对象来接收参数
- @ApiProperty:用对象接收参数时,描述对象的一个字段
- @ApiResponse:HTTP响应其中1个描述
- @ApiResponses:HTTP响应整体描述
- @ApiIgnore:使用该注解忽略这个API
- @ApiError:发生错误返回的信息
- @ApiImplicitParam:一个请求参数
- @ApiImplicitParams:多个请求参数
示例:
查看文档:
常用注解说明
@Api
用在请求的类上,表示对类的说明
示例:
@ApiOperation
用在请求的方法上,说明方法的用途、作用
示例:
@ApiImplicitParams
用在请求的方法上,表示一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
示例:
@ApiModel、@ApiModelProperty
@ApiModel
- 用在请求的类上,表示对类的说明
- 用于响应类上,表示一个返回响应数据的信息
这种一般用在 post 请求,使用 @RequestBody 这样的场景,请求参数无法使用 @ApiImplicitParam 注解进行描述的时候
@ApiModelProperty:用在属性上,描述响应类的属性
示例:
@ApiResponses
用在请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
示例:
@ApiParam
用在请求方法中,描述参数信息
示例: