1.简介
OpenAPI阶段的Swagger也被称为Swagger 3.0。在Swagger 2.0后,Swagger规范正式更名为OpenAPI规范,并且根据OpenAPI规范的版本号进行了更新。因此,Swagger 3.0对应的就是OpenAPI 3.0版本,它是Swagger在OpenAPI阶段推出的一个重要版本。与前几个版本相比,Swagger 3.0更加强调对RESTful API的支持和规范化,提供了更丰富和灵活的定义方式,并且可以用于自动生成文档、客户端代码、服务器代码和测试工具等。
1.1 Open API
OpenApi是业界真正的 api 文档标准,其是由 Swagger 来维护的,并被linux列为api标准,从而成为行业标准。
OpenAPI 3 Library for spring-boot (springdoc.org)
1.2 Swagger
swagger 是一个 api 文档维护组织,后来成为了 Open API 标准的主要定义者
1.3 SpringFox
SpringFox 是一个成熟且广泛使用的库,它允许你通过注解描述 API 并生成符合 OpenAPI 规范(原 Swagger 规范)的文档。SpringFox 支持 Swagger 2.0 及其后继者 OpenAPI 3.0。
特点:
- 支持 Swagger 2.0 和 OpenAPI 3.0。
- 通过使用 Swagger 注解(如
@Api
,@ApiOperation
,@ApiModel
,@ApiModelProperty
等)来描述 API。 - 提供了多种方式来自定义文档,包括通过代码或配置文件。
- 可以通过扫描类路径中的控制器类自动生成文档。
- 更新频率较低,最近几年维护活动减少。
1.4 SpringDoc
OpenAPI 3 Library for spring-boot (springdoc.org)
SpringDoc 是一个相对较新的替代方案,它专为 OpenAPI 3.0 设计,提供了对最新 OpenAPI 规范的全面支持。
特点:
- 主要关注 OpenAPI 3.0,对 OpenAPI 3.0 的支持更全面。
- 使用更简洁的注解(如
@Tag
,@Operation
,@Parameter
等)来描述 API。 - 更好的支持 Spring WebFlux,适合现代的响应式编程模型。
- 更频繁的更新和活跃的社区支持。
- 与 Spring Boot 的集成更加紧密,可以通过 Spring Boot 的自动配置特性简化设置过程。
1.5 Knife4j
Knife4jInsight(简单、方便的OpenAPI接口文档私有化聚合平台),地址:http://knife4j.nethttp://knife4j.net/
1.6 Swagger 3 (OpenAPI 3) 与swagger 2 区别
1.7 Swagger 3 (OpenAPI 3)注解详细介绍
(1)基本信息注解 | 描述 | 位置 | 属性 |
@OpenAPIDefinition | 用于定义整个 API 文档的基本信息。 | 类、接口 |
|
@Info | 用于定义 API 文档的基本信息 | 类、接口。 |
|
@Contact | 用于定义 API 文档中的联系人信息。 | 类、接口 |
|
@License | 用于定义 API 文档中的许可证信息 | 类、接口。 |
|
(2)分组注解 | 描述 | 位置 | 属性 |
@Tag | 用于给 API 分组,用途类似于为 API 文档添加标签。 | 方法、类、接口 |
|
(3)请求方法注解 | 描述 | 位置 | 属性 |
@Operation | 用于描述 API 的操作。 | 方法。 |
|
@Parameter | 用于描述操作的输入参数。 | 方法 |
|
@RequestBody | 用于描述操作的请求体 | 方法 |
|
@ApiResponse | 用于描述操作的响应结果 | 方法 |
|
@Content | 用于描述请求体或响应的内容 | 方法。 |
|
@Schema | 用于描述数据模型的属性。 | 方法、类、接口。 |
|
(4)路径注解 | 描述 | 位置 | 属性 |
@Path | 用于定义路径参数。 | 方法 |
|
@PathVariable | 用于描述路径参数。 | 方法的参数 |
|
@RequestParam | 用于描述查询参数。 | 方法的参数。 |
|
@RequestBody | 用于描述请求体。 | 方法的参数 | |
(5) 响应注解 | 描述 | 位置 | 属性 |
@ApiResponse | 用于描述响应结果。 | 方法。 |
|
@Content | 用于描述响应结果的内容 | 方法 |
|
@Schema | 用于描述数据模型的属性。 | 方法、类、接口。 |
|
2. 配置Knife4j
2.1 添加依赖
因为Knife4j提供的starter已经引用springdoc-openapi的jar,开发者需注意避免jar包冲突。这里直接使用Knife4j
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version>
</dependency>
2.2 添加配置类
package com.zsh.test.swagger3test.config;import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.media.StringSchema;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.configuration.SpringDocConfiguration;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Collections;/**Knife4j整合swagger3* @author ZhaoShuhao* @data 2024/7/21 11:06*/
@Configuration
public class OpenApiConfig {@Beanpublic OpenAPI springShopOpenApi() {return new OpenAPI()// 接口文档标题.info(new Info().title("swagger3")// 接口文档简介.description("这是基于Knife4j OpenApi3的测试接口文档")// 接口文档版本.version("1.0版本")// 开发者联系方式.contact(new Contact().name("zsh").email("1401969521@qq.com")));}
}
2.3 yml配置
springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: 'zsh'paths-to-match: '/**'#生成文档所需的扫包路径,一般为启动类目录packages-to-scan: com.zsh.test.swagger3test#knife4j配置
knife4j:#是否启用增强设置enable: true#开启生产环境屏蔽production: false#是否启用登录认证basic:enable: trueusername: adminpassword: 123456setting:language: zh_cnenable-version: trueenable-swagger-models: trueswagger-model-name: 用户模块
2.4 运行结果
路径:http://localhost:8080/doc.html