swagger的簡介及使用方法

Swagger 是一個用于描述、生成、文檔化和測試 RESTful API 的開源工具集。它可以自動生成 API 文檔,幫助開發者理解和使用 API。Swagger 由 Swagger.io 提供,并已經發展成了一套廣泛應用于 API 設計和文檔的標準。

Swagger 項目的歷史可以追溯到 2010 年,它最初由 Tony Tam 創建。當時,API 開發者通常需要花費大量時間手動編寫和維護文檔,并且手動維護文檔容易與實際 API 的實現不一致,導致文檔和實際接口的差異。Swagger 的設計目標就是通過自動生成文檔,減少這些手動工作,提高開發效率。

發展歷程

  1. 2011年

    • Swagger 在?GitHub?上開源發布,迅速吸引了開發者的關注。它提供了一個簡單的注解系統,開發者通過在代碼中添加注解即可自動生成 API 文檔。Swagger 可以幫助開發者和團隊更好地理解和使用 API。
  2. 2015年

    • Swagger 被納入?OpenAPI Initiative (OAI),一個由多個技術公司和開源社區組成的組織,旨在制定開放的 API 規范。OpenAPI 規范(OAS,OpenAPI Specification)取代了原有的 Swagger 規范,成為更加標準化的 API 描述格式。
    • Swagger 工具集的名字也被保持了下來,仍然用于描述和生成 API 文檔,而 OpenAPI 則成為技術規范。
  3. 2016年

    • Swagger 發布了?Swagger 2.0,并繼續進行更新與完善。Swagger 2.0 是 Swagger 生態系統的基礎,至今仍被廣泛使用。
  4. 2017年以后

    • OpenAPI 3.0 規范發布,它包含了對 Swagger 2.0 的改進和擴展,提供了更強大的功能。Swagger 的工具鏈也開始支持 OpenAPI 3.0 規范,并向兼容性過渡。

Swagger 的主要組件

Swagger 的工具集包括多個組成部分,使得開發者可以更好地設計和管理 API:

  1. Swagger Editor

    • 一個基于 Web 的編輯器,可以幫助開發者編寫和編輯 OpenAPI 規范文件(通常為?swagger.yaml?或?swagger.json?文件)。它支持實時預覽和驗證 API 規范。
  2. Swagger UI

    • Swagger UI 是一個基于瀏覽器的界面,提供交互式文檔界面,允許開發者和用戶查看 API 文檔,并直接在文檔界面上測試 API 的各個端點。
  3. Swagger Codegen

    • Swagger Codegen 允許開發者從 OpenAPI 規范中自動生成客戶端 SDK、服務器端代碼和 API 文檔。這些代碼生成器支持多種編程語言和框架。
  4. Swagger Hub

    • Swagger Hub 是一個商業化平臺,用于協作設計、構建和管理 API 文檔。它提供了基于云的 API 管理、版本控制和協作功能,適用于企業級應用。

Swagger 的優點

  • 自動化文檔生成:通過注解,Swagger 可以自動生成 API 的文檔,避免手動編寫文檔,減少出錯概率。
  • 易于使用:開發者可以通過簡單的注解和配置文件來定義 API,Swagger UI 提供了交互式的界面,方便開發者和用戶查看和測試 API。
  • 開源和廣泛支持:Swagger 是開源的,得到了廣泛的社區支持,并且能夠與許多開發框架(如 Spring、Node.js、Java、Python 等)兼容。

Swagger 的使用

1.?@Api

  • 作用:用于標記一個類是一個 Swagger 資源(通常是一個 Controller 類)。
  • 常見用法
  • @Api(tags = "用戶管理", description = "管理用戶的 API")
    public class UserController {// 控制器代碼
    }
    

2.?@ApiOperation

  • 作用:描述單個 API 操作(通常是一個方法),提供接口的詳細信息,如功能說明、HTTP 方法、響應類型等。
  • 常見用法
    @ApiOperation(value = "獲取用戶列表", notes = "獲取所有用戶的列表", response = User.class)
    @GetMapping("/users")
    public List<User> getUsers() {// 代碼
    }
    

3.?@ApiParam

  • 作用:用于描述方法參數的詳細信息(例如:是否必需、默認值等)。
  • 常見用法
    @ApiOperation("獲取指定用戶")
    @GetMapping("/user/{id}")
    public User getUser(@ApiParam(value = "用戶ID", required = true) @PathVariable Long id) {// 代碼
    }
    

4.?@ApiResponse

  • 作用:描述 API 操作的響應信息,例如狀態碼和響應類型。
  • 常見用法
    @ApiOperation(value = "刪除用戶", notes = "刪除指定用戶")
    @ApiResponses({@ApiResponse(code = 200, message = "刪除成功"),@ApiResponse(code = 404, message = "用戶未找到")
    })
    @DeleteMapping("/user/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {// 代碼
    }
    

5.?@ApiModel

  • 作用:用于定義 API 中的復雜對象模型(即請求體或響應體),例如對象參數或返回的復雜數據類型
  • 常見用法
  • @ApiModel(description = "用戶對象")
    public class User {@ApiModelProperty(value = "用戶ID", required = true)private Long id;@ApiModelProperty(value = "用戶姓名", example = "張三")private String name;
    }
    

6.?@ApiModelProperty

  • 作用:用于為模型屬性提供詳細描述,包括字段說明、是否必填、默認值等。
  • 常見用法
  • public class User {@ApiModelProperty(value = "用戶ID", required = true)private Long id;@ApiModelProperty(value = "用戶姓名", example = "張三")private String name;
    }
    

7.?@PathParam,?@QueryParam,?@HeaderParam,?@FormParam

  • 作用:用于綁定 HTTP 請求的路徑、查詢參數、請求頭和表單參數。它們分別對應不同類型的參數提取。
  • 常見用法
  • @GetMapping("/user")
    public User getUser(@QueryParam("id") Long id) {// 代碼
    }
    

8.?@RequestBody

  • 作用:用于標注方法參數接收請求體的數據,通常用來處理 JSON 或 XML 格式的請求。
  • 常見用法
  • @PostMapping("/user")
    public User createUser(@RequestBody User user) {// 代碼
    }
    

9.?@RequestMapping,?@GetMapping,?@PostMapping,?@PutMapping,?@DeleteMapping

  • 作用:用于定義 API 的 HTTP 請求類型和 URL 路徑。
  • 常見用法
  • @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) {// 代碼
    }

10.?@Consumes,?@Produces

  • 作用:用于標注接口支持的內容類型,通常用于描述請求和響應的格式(如 JSON、XML 等)。
  • 常見用法
  • @Consumes("application/json")
    @Produces("application/json")
    @PostMapping("/user")
    public ResponseEntity<User> createUser(@RequestBody User user) {// 代碼
    }
    

11.?@SwaggerDefinition

  • 作用:用來描述 Swagger 配置的元數據,如 API 的標題、版本、描述等。
  • 常見用法
  • @SwaggerDefinition(info = @Info(title = "用戶管理 API", version = "1.0", description = "提供用戶管理相關的操作")
    )
    public class UserController {// 控制器代碼
    }
    

12.?@ResponseStatus

  • 作用:用于指定 HTTP 響應的狀態碼,通常與?@ExceptionHandler?配合使用,定義異常的響應狀態。
  • 常見用法
  • @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "用戶未找到")
    public class UserNotFoundException extends RuntimeException {// 代碼
    }
    

OpenAPI 和 Swagger 的關系

隨著 OpenAPI Initiative 的出現,Swagger 成為了 OpenAPI 規范的工具之一。雖然 OpenAPI 規范變成了行業標準,但 Swagger 依然是最常用的工具集之一,并且支持 OpenAPI 3.0 規范。可以將 Swagger 理解為 OpenAPI 規范的工具實現,它包括了多種工具和框架來幫助開發者設計、文檔化和測試 API。

總結

Swagger 從最初的一個 API 文檔工具,逐漸發展成為一個完整的工具鏈,幫助開發者更高效地設計和管理 API。隨著 OpenAPI 規范的推行,Swagger 成為這一規范的核心工具,繼續服務于全球的開發者社區。


天不老,情難絕,信似雙絲網,中有千千結

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79675.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79675.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79675.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決Flutter 2.10.5在升級Xcode 16后的各種報錯

Flutter 環境 Flutter version 2.10.5Dart version 2.16.2DevTools version 2.9.2CocoaPods version 1.16.2Xcode 16.3 問題一&#xff1a;XCResult parsing error: Error: This command is deprecated and will be removed in a future release, --legacy flag is required t…

Vue + Spring Boot 整合全解析

一、引言 在當今的Web開發領域&#xff0c;前后端分離架構已成為主流。Vue.js作為一款流行的前端框架&#xff0c;以其簡潔易用和高效的特點深受開發者喜愛&#xff1b;Spring Boot則是Java后端開發中快速構建應用的利器。將Vue和Spring Boot整合&#xff0c;能夠充分發揮兩者…

PDF.js 生態中如何處理“添加注釋\添加批注”以及 annotations.contents 屬性

我們來詳細解釋一下在 PDF.js 生態中如何處理“添加注釋”以及 annotations.contents 屬性。 核心要點&#xff1a;PDF.js 本身主要是閱讀器&#xff0c;不是編輯器 首先&#xff0c;最重要的一點是&#xff1a;PDF.js 的核心庫 (pdfjs-dist) 主要設計用于解析和渲染&#xf…

當HTTP遇到SQL注入:Java開發者的攻防實戰手冊

一、從HTTP請求到數據庫查詢:漏洞如何產生? 危險的參數拼接:Servlet中的經典錯誤 漏洞代碼重現: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String category = request.getParameter("…

【grafana原生告警中心配置飛書機器人告警】

在grafana中的connect point中使用webhook的方式推送到飛書&#xff0c;始終無法觸發告警&#xff0c;原因是grafana推送的格式飛書不識別&#xff0c;現有兩種方式 1.使用中轉服務 使用flask搭建一個服務&#xff0c;grafana告警先通過webhook發送到web服務中&#xff0c;格…

kafka集群認證

1、安裝Kerberos(10.10.10.168) yum install krb5-server krb5-workstation krb5-libs -y ? 查看版本 klist -V ? Kerberos 5 version 1.20.1 ? 編輯/etc/hosts 10.10.10.168 ms1 10.10.10.150 ms2 10.10.10.110 ms3 vim /etc/krb5.conf # Configuration snippets ma…

前端工程化之自動化測試

自動化測試 自動化測試為什么需要測試&#xff1f;什么時候需要考慮測試測試類型前端測試框架單元測試Jest 重點掌握項目示例package.jsonsrc/utils/math.tssrc/utils/math.test.ts進行測試jest.config.js覆蓋率直觀看覆蓋率coverage/lcov-report/index.html src/main.test.tst…

分布式系統核心原理

CAP定理與權衡實踐 CAP定理 一致性&#xff08;Consistency&#xff09; 強一致性&#xff1a;所有讀寫操作均基于最新數據&#xff08;如銀行轉賬&#xff09;。 最終一致性&#xff1a;數據副本經過一段時間后達到一致&#xff08;如社交媒體的點贊數&#xff09;。 技術實現…

Step文件無法編輯怎么辦?

Step文件無法編輯怎么辦&#xff1f; 這里介紹兩種方法&#xff0c; 1、 直接導入 準備step文件&#xff0c;solidworks導入后是這樣&#xff0c;不能在上面直接編輯 圖 1 點擊右鍵&#xff0c;選擇解除特征&#xff08;不同版本的可能不太一樣&#xff0c;這里是solidworks2…

TIM_ITConfig() 和 TIM_Cmd()

在STM32的定時器中斷配置中&#xff0c;TIM_ITConfig() 和 TIM_Cmd() 是兩個關鍵函數&#xff0c;它們分別控制中斷使能和定時器計數器的啟停&#xff0c;作用層級不同。以下是詳細解釋&#xff1a; 1. TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE) 作用 啟用定時器的特定中斷…

TensorFlow 實現 Mixture Density Network (MDN) 的完整說明

本文檔詳細解釋了一段使用 TensorFlow 構建和訓練混合密度網絡&#xff08;Mixture Density Network, MDN&#xff09;的代碼&#xff0c;涵蓋數據生成、模型構建、自定義損失函數與預測可視化等各個環節。 1. 導入庫與設置超參數 import numpy as np import tensorflow as t…

數據結構實驗7.2:二叉樹的基本運算

文章目錄 一&#xff0c;實驗目的二&#xff0c;問題描述三&#xff0c;基本要求四&#xff0c;實驗操作五&#xff0c;示例代碼六&#xff0c;運行效果 一&#xff0c;實驗目的 深入理解樹與二叉樹的基本概念&#xff0c;包括節點、度、層次、深度等&#xff0c;清晰區分二叉…

直線軸承常規分類知多少?

直線軸承的分類方式多樣&#xff0c;以下是從材質、結構形狀和常規系列三個維度進行的具體分類&#xff1a; 按主要材質分類 外殼材質&#xff1a;常見的有不銹鋼&#xff0c;具有良好的耐腐蝕性&#xff0c;適用于一些對環境要求較高、易受腐蝕的工作場景&#xff1b;軸承…

websocket和SSE學習記錄

websocket學習記錄 websocket使用場景 即時聊天在線文檔協同編輯實施地圖位置 從開發角度來學習websocket開發 即使通信項目 通過node建立簡單的后端接口,利用fs&#xff0c; path&#xff0c; express app.get(*, (req, res) > {const assetsType req.url.split(/)[…

CUDA編程中影響性能的小細節總結

一、內存訪問優化 合并內存訪問&#xff1a;確保相鄰線程訪問連續內存地址&#xff08;全局內存對齊訪問&#xff09;。優先使用共享內存&#xff08;Shared Memory&#xff09;減少全局內存訪問。避免共享內存的Bank Conflict&#xff08;例如&#xff0c;使用padding或調整訪…

【雙指針】對撞指針 快慢指針 移動零

文章目錄 雙指針介紹對撞指針快慢指針283. 移動零解題思路算法思路算法流程雙指針介紹 ? 算法中的雙指針,并不一定是指我們平常在 c/c++ 使用的指針類型,更多時候其實是數組的下標等,因為它們也是有標識某個元素的功能,通常我們也就順其自然地稱其為 “指針” ! ? 常見…

數據結構0基礎學習堆

文章目錄 簡介公式建立堆函數解釋 堆排序O(n logn)topk問題 簡介 堆是一種重要的數據結構&#xff0c;是一種完全二叉樹&#xff0c;&#xff08;二叉樹的內容后面會出&#xff09;&#xff0c; 堆分為大小堆&#xff0c;大堆&#xff0c;左右結點都小于根節點&#xff0c;&am…

4.17--4.19刷題記錄(貪心)

第一部分&#xff1a;準備工作 代碼隨想錄中解釋為&#xff1a;貪心的本質是選擇每一階段的局部最優&#xff0c;從而達到全局最優。 而我的理解為&#xff1a;貪心實質上是具有最優子結構的一種算法。所有的解都能由當前最優的解組成。 第二部分&#xff1a;開始刷題 &…

學習筆記十七——Rust 支持面向對象編程嗎?

&#x1f9e0; Rust 支持面向對象編程嗎&#xff1f; Rust 是一門多范式語言&#xff0c;主要以 安全、并發、函數式、系統級編程為核心目標&#xff0c;但它同時也支持面向對象的一些關鍵特性&#xff0c;比如&#xff1a; 特性傳統 OOP&#xff08;如 Java/C&#xff09;Ru…

【Linux】43.網絡基礎(2.5)

文章目錄 2.4 TCP/UDP對比2.4.1 用UDP實現可靠傳輸(經典面試題) 2.5 TCP 相關實驗2.5.1 理解 listen 的第二個參數 2.4 TCP/UDP對比 我們說了TCP是可靠連接, 那么是不是TCP一定就優于UDP呢? TCP和UDP之間的優點和缺點, 不能簡單, 絕對的進行比較TCP用于可靠傳輸的情況, 應用于…