Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。它遵循 OpenAPI 规范,这是 Linux 基金会的一个项目,旨在通过定义一种用来描述 API 格式或 API 定义的语言,来规范 RESTful 服务开发过程。
Swagger的作用
Swagger 的主要作用可以概括为以下几点:
- 将项目中所有的接口展现在页面上,使后端程序员无需编写专门的接口文档给前端使用者。
- 接口更新后,只需修改代码中的 Swagger 描述即可实时生成新的接口文档,避免了接口文档过时的问题。
- 通过 Swagger 页面,可以直接进行接口调用和测试,降低了项目开发阶段的调试成本。
Swagger的版本
Swagger目前有多个版本,其中 Swagger 2.X 版本和少量的 1.X 版本是市面上的主流。Swagger 3.0 发布于 2020 年 7 月,虽然是最新版,但许多项目仍在使用旧版本。新版本相较于旧版本,配置更为简单,例如依赖项配置减少了 50%,并且新版 Swagger 页面设计风格现代化,更具科技感,整体美观了不少。值得一提的是,Swagger 的升级过程非常平滑,从老版本升级到新版本,只需要简单的配置即可,用于描述接口的注解还是延续了老版本的用法,这样就可以在不修改大部分主要代码的情况下,成功升级到最新版本。
Swagger的使用
在 Spring Boot 项目中集成 Swagger 通常需要以下步骤:
- 添加 Swagger 相关依赖到项目中。
- 在 Spring Boot 的启动类或配置类中添加 @EnableSwagger2 注解,开启 Swagger 功能。
- 配置 Swagger 文档摘要信息,如扫描路径、API 信息等。
- 通过访问 http://localhost:8080/swagger-ui.html 来查看和使用 Swagger UI。
Swagger的注解
Swagger 提供了一系列注解来描述和控制 API 文档的生成,例如:
- @Api:用于类,标记该类是 Swagger 资源。
- @ApiOperation:用于方法,描述一个 HTTP 请求的操作。
- @ApiModel 和 @ApiModelProperty:用于模型和属性,描述实体和属性的信息。
- @ApiImplicitParam 和 @ApiImplicitParams:用于方法,描述方法的参数。
- @ApiResponse 和 @ApiResponses:用于方法,描述方法的响应信息。
- @ApiIgnore:用于类或方法,表示不在 Swagger UI 中显示。
总结
Swagger 是一个强大的工具,它不仅能够实时更新 API 文档,还能在线测试 API,极大地提高了开发效率。在正式发布时,可以关闭 Swagger,出于安全考虑,同时也节省内存。通过 Swagger,开发人员可以更好地理解和使用 API,从而提高前后端的协作效率。
例子
下面是一段Swagger的代码案例
@Configuration
public class SwaggerConfiguration {
@Bean
public GroupedOpenApi createRestApi() {
return GroupedOpenApi.builder()
.group("接口文档")
.packagesToScan("com.yami.shop.api").build();
}
@Bean
public OpenAPI springShopOpenApi() {
return new OpenAPI()
.info(new Info().title("Mall4j接口文档")
.description("Mall4j接口文档,openapi3.0 接口,用于前端对接")
.version("v0.0.1")
.license(new License().name("使用请遵守AGPL3.0授权协议").url("https://www.mall4j.com")));
}
}
1. @Configuration 注解
<JAVA>
@Configuration
public class SwaggerConfiguration {}
@Configuration表示这是一个 Spring 配置类,Spring 会在启动时加载这个类,并将其中的@Bean方法注册为 Spring 容器中的 Bean。
2. @Bean 方法:createRestApi()
<JAVA>
@Bean
public GroupedOpenApi createRestApi() {
return GroupedOpenApi.builder()
.group("接口文档")
.packagesToScan("com.yami.shop.api")
.build();
}
- 这个方法定义了一个
GroupedOpenApiBean,用于配置接口文档的分组和扫描路径。 group("接口文档"):将生成的接口文档分组,命名为“接口文档”。packagesToScan("com.yami.shop.api"):指定扫描的包路径为com.yami.shop.api,Swagger 会扫描该包下的所有 Controller 类,并生成对应的接口文档。
3. @Bean 方法:springShopOpenApi()
<JAVA>
@Bean
public OpenAPI springShopOpenApi() {
return new OpenAPI().info(new Info()
.title("Mall4j接口文档")
.description("Mall4j接口文档,openapi3.0 接口,用于前端对接") .version("v0.0.1")
.license(new License()
.name("使用请遵守AGPL3.0授权协议")
.url("https://www.mall4j.com")));}
- 这个方法定义了一个
OpenAPIBean,用于配置接口文档的全局信息。 title("Mall4j接口文档"):设置文档的标题为“Mall4j接口文档”。description("Mall4j接口文档,openapi3.0 接口,用于前端对接"):设置文档的描述信息。version("v0.0.1"):设置文档的版本号。license(new License().name("使用请遵守AGPL3.0授权协议").url("https://www.mall4j.com")):设置文档的许可证信息,包括名称和链接。
4. 整体作用
这段代码的作用是:
- 配置 Swagger 的分组和扫描路径,将
com.yami.shop.api包下的接口生成文档,并分组为“接口文档”。 - 定义接口文档的全局信息,包括标题、描述、版本号和许可证信息。
5. 运行效果
启动 Spring Boot 应用后,访问 Swagger 的 UI 界面(通常是 http://localhost:8080/swagger-ui.html),你会看到:
- 文档的标题为“Mall4j接口文档”。
- 文档的描述为“Mall4j接口文档,openapi3.0 接口,用于前端对接”。
- 文档的版本号为
v0.0.1。 - 文档的许可证信息为“使用请遵守AGPL3.0授权协议”,并附带链接。
- 所有
com.yami.shop.api包下的接口会被扫描并展示在“接口文档”分组中。
6. 依赖说明
要使用这段代码,需要在 pom.xml 中添加以下依赖(如果使用 Maven):
<XML>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.0.0</version>
</dependency>
springdoc-openapi-starter-webmvc-ui是 Spring Boot 中用于支持 OpenAPI 3.0 的依赖。