当前位置: 首页 > news >正文

Swagger、Springfox、Springdoc-openapi 到底是什么关系

记得刚开始想在 SpringBoot 应用中使用 Swagger 生成 API 文档时,在 Swagger 官网上想找如何在 SpringBoot 中使用的指导,结果肯定是找不到,因为当时不清楚 Swagger 的定位是什么,只知道可以用它生成 API 文档。所以就想写这篇文章,重点总结一下 Swagger 和 Springfox、Springdoc-openapi 有什么关系及原理,还有 1 个增强的工具 Knife4j,不会描述具体用法。

OpenAPI 规范

讲 Swagger 之前,要先介绍一下 OpenAPI 规范(OpenAPI Specification,简写为 OAS)。

OpenAPI规范(前身为 Swagger 规范)是一种用于描述 REST API 的格式,可以用 YAML 或 JSON 格式编写,可以描述 API 的所有信息,包括:

  • endpoint 及其操作方法,比如 GET
  • 操作参数
  • 认证方式
  • 联系信息、许可证、使用条款及其他相关信息

Swagger

Swagger 是围绕 OpenAPI 规范构建的一组开源工具,可以用来设计、构建、记录和使用 REST API,官网是 https://swagger.io/。

Swagger 的主要工具包括:

  • Swagger Editor:基于浏览器的编辑器,可用于编写 OpenAPI 定义。
  • Swagger UI:将 OpenAPI 定义渲染成交互式文档。(OpenAPI 定义是 YAML 或 JSON 格式,可以是手动编写的文件,也可以是调用接口获取的数据。)
  • Swagger CodeGen:通过 OpenAPI 定义生成服务端桩函数和客户端库(客户端语言支持 40 多种)。
  • Swagger Core:用于创建、使用和操作 OpenAPI 定义的 Java 相关工具库。
  • Swagger Parser:用于解析 OpenAPI 定义的 Java 工具库。
  • Swagger APIDom:为不同描述语言和序列化格式的API提供统一的结构化描述规范。
  • 除了上面的,还可以在此网址 https://swagger.io/tools/open-source/open-source-integrations/ 查看其它 Swagger 相关的工具,包括 Swagger 官方提供的工具以及其他社区开发的用于将 Swagger 集成到不同编程语言的工具。
  • Swagger官网还提供了用于 API 设计和协作的线上平台 API Hub 。

综上所述,Swagger 是基于 OpenAPI 规范对 REST API 进行管理的一组工具。

  • 功能上它不仅能生成 API 文档,可以设计 API、生成 API 代码、测试 API 等。
  • 它是和编程语言无关的,适用于Java、Go、Python、JavaScript等多种编程语言。(所以去 Swagger 官网找如何在 SpringBoot 中使用的操作指导找不到)

Springfox & Springdoc-openapi

Springfox 和 Springdoc-openapi 既不是 Swagger 官方提供的,也不是 Spring 官方提供的,而是由两个不同的社区团队开发的,方便开发者将 Swagger 集成到 Spring 框架中。

Springfox 在 2020 年 7 月发布 3.0.0 版本后,就没有更新过了。

所以现在如果要在 SpringBoot 应用中使用 Swagger,就用 Springdoc-openapi ,官网是 https://springdoc.org/ 。

它的核心原理是通过动态解析 Spring MVC 的控制器(Controller)、方法(Handler Methods)、模型(DTOs)等元数据,结合注解(如 Swagger 注解或 JSR-303 校验注解),自动构建 OpenAPI 规范的 JSON/YAML 描述文件,最终通过 Swagger UI 或其他工具(比如 Redoc )渲染成可视化文档。

当引用 Springdoc-openapi 的库时,它会自动引用 Swagger 相关的库,比如:swagger-annotations-jakarta-x.x.x.jar、swagger-core-jakarta-x.x.x.jar、swagger-ui-x.x.x.jar 等,其中 swagger-ui-x.x.x.jar 是将 html、css、javascript 等静态资源文件打包到 resources 目录下的,这样启动 SpringBoot 应用后,就可以通过 /swagger-ui/index.html 访问 Swagger-UI 的页面,Swagger-UI 会调用 /v3/api-docs 接口获取 springdoc-openapi 解析出来的 OpenAPI JSON 数据,再将数据展示到页面上。

Knife4j

Knife4j 是一个集Swagger2 和 OpenAPI3
为一体的增强解决方案,它是基于 Springfox 和 Springdoc-openapi 的,是由国内社区开发的,官网是 https://doc.xiaominfo.com/ 。

使用 Knife4j 后,既可以通过 /swagger-ui/index.html 访问 Swagger-UI 页面,也可以通过 /doc.html 访问 knife4j 的页面。

Knife4j 还支持将接口文档离线导出为 markdown、html、word 等格式。

总结

了解了 Swagger、Springfox、Springdoc-openapi、Knife4j 的关系后,就可以去对应的官网找文档学习具体的用法了。

如果要在 SpringBoot 中使用 Swagger 生成 API 文档,直接使用 Springdoc-openapi 或 Knife4j 即可。
如果不需要自定义内容,引入对应的库之后,直接用 Swagger 的注解对 API 进行描述就可以。

相关文章:

  • .NET外挂系列:7. harmony在高级调试中的一些实战案例
  • Jetson系统烧录与环境配置全流程详解(含驱动、GCC、.Net设置)
  • hadoop 无法存储数据到hbase里面 已经解决
  • 【论文阅读】LLaVA-OneVision: Easy Visual Task Transfer
  • Grafana XSSOpenRedirectSSRF漏洞复现(CVE-2025-4123)
  • AI与.NET技术实操系列(七):使用Emgu CV进行计算机视觉操作
  • 微信小程序调用蓝牙API “wx.writeBLECharacteristicValue()“ 报 errCode: 10008 的解决方案
  • 无法访问org.springframework.boot.SpringApplication
  • Android Studio 开发环境兼容性检索(AGP / Gradle / Kotlin / JDK)
  • 【数据架构03】数据治理架构篇
  • k8s容器入门(2) 容器化组件“可漂移“
  • 使用KubeKey快速部署k8s v1.31.8集群
  • 黑马k8s(十三)
  • Python刷题:神奇的函数
  • linux 内核warn_on/Bug_on
  • Java多线程同步:确保并发安全的关键策略
  • 肿瘤特异性标志物CD248
  • AES加密模式详解及OpenSSL C库函数指南
  • LeRobot 框架的开发指南 (下)
  • opencv 图像的平移和旋转
  • 青白江做网站的公司/制作网页教程
  • 免费影视网站建设/百度推广官网入口
  • 描述网站开发的过程/磁力搜索器 磁力猫
  • 不用备案的网站/今天的头条新闻
  • 电脑网站进不去网页怎么办/快速建站教程
  • 闲鱼钓鱼网站怎么做/360优化大师