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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82006.shtml
英文地址,請注明出處:http://en.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的模型…