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

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 进行描述就可以。

http://www.xdnf.cn/news/8383.html

相关文章:

  • 使用 GPUStack 纳管摩尔线程 GPU 进行大语言模型和文生图模型的推理
  • ASPICE认证 vs. 其他标准:汽车软件开发的最优选择
  • C# UDP协议:核心原理、高效实现与实战进阶指南​
  • 2025语音语聊系统源码开发深度解析:WebRTC与AI降噪技术如何重塑语音社交体验
  • 智能存储如何应对极端环境挑战?忆联独家解锁PCIe 5.0固态存储“抗辐射”黑科技,重新定义数据安全防护新高度
  • 机会成本与沉没成本:如何做出理性经济决策
  • grafana/loki-stack 设置日志保存时间及自动清理
  • HarmonyOS NEXT~鸿蒙AI开发全解析:HarmonyOS SDK中的智能能力与应用实践
  • PCB设计教程【入门篇】——电路分析基础-读懂原理图
  • lanqiaoOJ 4330:欧拉函数模板
  • OceanBase 共享存储:云原生数据库的存储
  • 解析 Python 中的 if name == main 机制
  • 多版本Node.js共存管理工具NVM详细使用教程
  • 栈队列 模版题单
  • 2025年电工杯A题数据收集分享
  • 【萤火工场GD32VW553-IOT开发板】ADC电压表
  • 不使用Long.parseLong()将String转成long类型,不使用String.valueOf()将Long转成String类型
  • 通过上传使大模型读取并分析文件实战
  • AI浪潮下,第五消费时代的商业进化密码
  • PTA刷题笔记3(微难,有详解)
  • 自学嵌入式 day 23 - 数据结构 树状结构 哈希表
  • Java集合操作:如何避免并发修改异常
  • PictureThis 解锁高级会员版_v5.3.0 拍植物知名称和植物百科
  • Android屏幕适配利器:Kotlin动态尺寸计算工具类完整封装
  • C++高频面试考点 -- 智能指针
  • Dify1.RAG学习(未完待续)
  • 2025电工杯A题电工杯数学建模思路代码文章教学:光伏电站发电功率日前预测问题
  • 从乳制品行业转型看智能化升级新机遇——兼谈R²AIN SUITE的赋能实践
  • 关于flutter中Scaffold.of(context).openEndDrawer();不生效问题
  • Git全流程操作指南