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.pswp.cn/pingmian/82006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测DINO-DETR(2023)详细解读

文章目录 对比去噪训练混合查询选择look forward twice 论文全称为:DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 提出了三个新的方法: 首先,为了改进一对一的匹配效果,提出了一种对比去噪训练方法…

深度学习-162-DeepSeek之调用远程大模型API接口参数结构分析

文章目录 1 文本对话请求1.1 请求参数1.1.1 参数说明1.1.2 参数总结1.2 返回参数1.2.1 id1.2.2 choices1.2.3 usage1.2.4 created1.2.5 model1.2.6 object1.2.7 参数总结2 应用示例2.1 调用大模型API2.2 返回结果3 参考附录分析文本对话请求v1/chat/completions的参数结构含义。…

uniapp原生插件

前言 使用uniapp开发Android app时,一些特定的需求没办法实现的时候就只能开发原生插件或者uts插件去满足需求,我的需求目前uts插件没法实现,只能靠原生插件了😆 需求:拍照不保存图片到相册,uniapp的API或…

CVE-2024-42323

漏洞名称 Apache HertzBeat SnakeYaml 反序列化远程代码执行漏洞(CVE-2024-42323) 漏洞描述 Apache HertzBeat 是一款开源的实时监控告警工具,支持对操作系统、中间件、数据库等多种对象进行监控,并提供 Web 界面进行管理。 在…

“人工智能+多学科”选题思路,2025热点AI+(180个)

给大家整理了一份超全的论文资料合集 不仅有论文创新点的干货知识、开题报告模板、文献综述模板、审稿意见回复模板、还有全套的SCI论文写作指导教程和人工智能各方向经典的论文合集以及各大热门科研和论文写作润色工具等 以及1000G人工智能资料包(如下图&#xff…

LangChain4j入门AI(八)使用RAG增加私有知识库

前言 我们通过提示词工程提升了通用LLM的专业知识水平,并结合Function Calling构建了私有业务能力。为了在实际应用中有效维护私有领域的专有数据,我们进一步采用大模型微调或RAG检索增强技术,使LLM能够充分掌握私有知识库的内容。 一、微调…

使用arXiv.org上的资源进行学术研究

arXiv.org e-Print archive arXiv.org 是一个收集物理学、数学、计算机科学、定量生物学、定量金融学和统计学等领域学术论文预印本的网站,其使命是促进科学文献的传播与交流。以下是关于该网站的详细介绍: 核心定位与功能 学术预印本平台&#xff1a…

Redis 中的缓存击穿、缓存穿透和缓存雪崩是什么?

在 Redis 中,缓存击穿、缓存穿透和缓存雪崩是常见的缓存问题,它们都会影响系统的性能和稳定性。以下是针对这三个问题的详细解释: 一、缓存击穿(Cache Breakdown) 定义:缓存击穿是指某个热点数据在缓存中…

RabbitMQ配置环境变量

一、RabbitMQ下载 1、从官网下载 在官网中下载,适合自己电脑的版本。我直接下载的windows版本。 然后下载opt这个软件这个版本适合3.6.3的RabbitMQ,点击蓝色的字体即可下载。 2、安装erlang 当你双击安装程序并进入安装向导后,会看到这样…

基于vue框架的东莞市二手相机交易管理系统5yz0u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,相机分类,二手相机 开题报告内容 基于FlaskVue框架的东莞市二手相机交易管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着数字技术的迅猛发展和摄影文化的广泛普及,相机已成为人们记录生活、表达创意的重要工…

dify调用Streamable HTTP MCP应用

一、概述 上一篇文章,介绍了使用python开发Streamable HTTP MCP应用,链接:https://www.cnblogs.com/xiao987334176/p/18872195 接下来介绍dify如何调用MCP 二、插件 安装插件 需要安装2个插件,分别是:Agent 策略(支持 …

笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数

笔记:将一个文件服务器上的文件(一个返回文件数据的url)作为另一个http接口的请求参数 最近有这么个需求,需要往某一个业务的外部接口上传文件信息,但是现在没有现成的文件,只在数据库存了对应的url&#…

如何在 FastAPI 中合理使用 Pydantic 的 Alias

下面的内容是我跟 Gemini 2.5 Pro 探讨关于Pydantic 的 Alias 问题之后,让它总结的一篇技术博客。 我已经有很长一段时间没有好好写技术类的博客了,这就是原因。 可以在 https://panzhixiang.cn/ 查看更多我的博客,有技术的,也有很…

CAU人工智能class4 批次归一化

归一化 在对输入数据进行预处理时会用到归一化,将输入数据的范围收缩到0到1之间,这有利于避免纲量对模型训练产生的影响。 但当模型过深时会产生下述问题: 当一个学习系统的输入分布发生变化时,这种现象称之为“内部协变量偏移”…

动态库和静态库详解

库其实就是个文件 下面是文件后缀 静态库:.a(linux) .lib(windows) 动态库:.so(linux) .dll(windows) 静态库的制作 ar -rc libmystdio.a my_stdio.o my_string.o ar是归档工具,rc表示replace和create,ar跟tar有点…

PDF 文档结构化工具对比:Marker 与 MinerU

模型训练数据-MinerU一款Pdf转Markdown软件 https://codeyuan.blog.csdn.net/article/details/144315141 在当前大模型(LLM)和自然语言处理(NLP)应用快速发展的背景下,如何高效地将 PDF 等非结构化文档转换为结构化数…

shp2pgsql 导入 Shp 到 PostGIS 空间数据库

前言 ❝ shp2pgsql是PostGIS自带的命令行工具,用于将Shapefile文件声称SQL脚本导入到PostGIS空间数据库。 1. 安装 PostGIS 通过Application Stack Builder或者下载单独的PostGIS包进行安装。而shp2pgsql则是与PostGIS工具集成在一起,无需单独下载。该命…

【ISP算法精粹】什么是global tone mapping和local tone mapping?

1. 简介 全局色调映射(Global Tone Mapping)和局部色调映射(Local Tone Mapping)是高动态范围(HDR)图像处理中的两种关键技术,用于将高动态范围图像的亮度值映射到标准动态范围(LDR…

虚拟环境中VSCode运行jupyter文件

用VS Code打开jupyter文件,点击右上角 Select Kernel 在正上方会出现这个选择框,选择 Python Environment 会出来所有的虚拟环境,选择要用的环境行

如何计算VLLM本地部署Qwen3-4B的GPU最小配置应该是多少?多人并发访问本地大模型的GPU配置应该怎么分配?

本文一定要阅读我上篇文章!!! 超详细VLLM框架部署qwen3-4B加混合推理探索!!!-CSDN博客 本文是基于上篇文章遗留下的问题进行说明的。 一、本文解决的问题 问题1:我明明只部署了qwen3-4B的模型…