接口文檔神器Swagger(上篇)


本文來自網易雲社區


作者:李哲

接口文檔管理一直是一個讓人頭疼的問題,伴隨着各種接口文檔管理平台涌現,如阿里開源的rap,ShowDoc,sosoapi,等等(網上能找到很多這種管理平台,包括我們自己做的idoc)。這些平台都是一個共同特點,創建文檔,編輯,保存文檔,一些功能強大的還有mock,統計接口信息等功能,所以這些平台更像一個接口文檔的存儲管理系統,可以方便人們查看、編輯文檔。然而接口一般都是經常變化(添加、刪除參數),這就需要接口編寫者及時更新文檔,否則文檔將失去意義,但是頻繁去更新文檔也會花費開發不少時間。Swagger的出現在某種程度上解決了這些問題,Swagger提供了一套完整的接口文檔解決方案,其功能非常強大,下面將從Swagger簡單介紹和使用、Swagger-springmvc原理解析、Swagger其他功能等方面介紹。

一、Swagger介紹和使用

1、 什么是swagger

Swagger 是一個規范和完整的框架,用於生成、描述、調用和可視化RESTful風格的 Web 服務。總體目標是使客戶端和文件系統作為服務器以同樣的速度來更新。文件的方法,參數和模型緊密集成到服務器端的代碼,允許API來始終保持同步。Swagger讓部署管理和使用功能強大的API變得非常簡單。官方網站:http://swagger.io/

Swagger采用OpenAPI規范,OpenAPI規范這類API定義語言能夠幫助你更簡單、快速的表述API,尤其是在API的設計階段作用特別突出。一旦編寫完成,API文檔可以作為:

·  需求和系統特性描述的根據

·  前后台查詢、討論、自測的基礎

·  部分或者全部代碼自動生成的根據

·  其他重要的作用,比如開放平台開發者的手冊

2、 如何編寫API文檔

(1)定義YAML文件,然后可以生成各種語言的代碼框架,對於后台程序員來說,較少人會願意寫出一堆YAML格式。

(2)定義JSON格式文件,按照swagger文檔書寫規范編寫文檔,和YAML一樣只是兩種不同格式。

(3)通過swagger的各種語言的插件,可以通過配置及少量代碼,生成接口文檔及測試界面。通過yaml或json書寫的是靜態文檔,需要書寫文檔中需要的內容,詳細寫法可參考:https://www.gitbook.com/book/huangwenchao/swagger/details,完成后可以通過可視化頁面顯示接口文檔。但要完成整個項目的接口文檔書寫也非常耗時,如果是后台開發,可以通過簡單配置實現文檔的自動生成。

3、 Springmvc項目中使用swagger

1) 添加maven依賴

   

<dependency>

         <groupId>com.mangofactory</groupId>

         <artifactId>swagger-springmvc</artifactId>

         <version>1.0.2</version>

      </dependency>


2) 定義一個swagger配置類,添加如下注解,具體內容可參考網上demo

3) 在spring配置文件中將寫的config類添加一個bean

4) 在controller中接口處添加swagger注解和相應參數


5) Swagger UI配置

https://github.com/swagger-api/swagger-ui 獲取3.0版本以下,2.0版本以上。其所有的dist目錄下東西放到需要集成的項目里,本文放入src/main/webapp/WEB -INF/docs/ 目錄下。

  修改swagger/index.html文件,默認是從連接http://petstore.swagger.io/v2/ swagger.json獲取 API 的 JSON,這里需要將url內容修改為http://{ip}:{port}/{project Name}/api-docs的形式,{}中的內容根據具體情況填寫。比如本文的url值為:http://localhost/quality /docs/api-docs。所有工作完成后,在瀏覽器中輸入上述url地址可得到如下頁面(注:該頁面是swagger官網示例)。


接口詳情如下圖所示:


可以根據請求參數訪問接口,如果網絡通暢將返回接口的response結果,在該頁面可以看到接口的基本詳情,而且如果后台接口發生變化,該頁面中的信息也會隨着變化,這樣接口的內容就是實時變化的,相對於靜態的文檔每次改動都需要開發更新文檔的方式,該方式無疑是非常好的解決方案。

如果過程中發現沒有達到預期的結果,請檢查swagger ui位置是否正確;spring中是否添加了SwaggerConfig的bean。

4、 Springboot項目中使用swagger2

相對於springmvc中添加swagger,springboot中更加簡單。Springboot中許多配置是默認的,不用太多配置就能完成swagger的接入。具體流程如下:

1) 添加maven依賴

  

<!-- swagger框架 -->

      <dependency>

         <groupId>io.springfox</groupId>

         <artifactId>springfox-swagger2</artifactId>

         <version>2.2.2</version>

      </dependency>

      <dependency>

         <groupId>io.springfox</groupId>

         <artifactId>springfox-swagger-ui</artifactId>

         <version>2.2.2</version>

      </dependency>


2)  創建swagger2配置類,該類和springmvc中的不太一樣,具體可參考swagger官網。配置中通過@Configuration注解,讓Spring來加載該類配置。再通過@EnableSwagger2注解來啟用Swagger2。


3)  和springmvc一樣,在controller接口中編寫swagger相關的注解來標識接口信息。如下所示,通過@ApiOperation注解來給API增加說明、通過@ApiImplicitParams、@ApiImplicitParam注解來給參數增加說明。


4)  完成上述代碼添加上,啟動Spring Boot程序,訪問:http://localhost:8080/swagger- ui.html。就能看到前文所展示的RESTful API的頁面。我們可以再打開具體的API請求,以POST類型的/users請求為例,可找到上述代碼中我們配置的Notes信息以及參數user的描述信息,如下圖所示。

通過簡單的配置改動,spring就能結合swagger,通過簡單的方式自動生成接口文檔,而且以可視化頁面的形式展現,非常靈活方便。


       下面對swagger在spring中使用的一些常用注解進行說明:

  • Api、ApiIgnore

  • ApiModel

  • ApiModelProperty

  • ApiOperation

  • ApiParam、ApiImplicitParam、ApiImplicitParams

  • ApiResponse

  • ApiResponses

  • ResponseHeader

1)  Api注解用於類上,說明該類的作用。可以標記一個Controller類做為swagger 文檔資源。與Controller注解並列使用。

            @Api(value = "/user", description = "Operations about user")

屬性如下:


2) ApiOperation注解,用在方法上,說明方法的作用,與Controller中的方法並列使用。


3) ApiParam注解用在@ApiImplicitParams的方法里邊,屬性配置:

4) ApiResponse注解用於響應配置,與Controller中的方法並列使用。屬性配置:


5) ApiResponses注解中包含ApiResponse,用於描述一組ApiResponse值。

6) ResponseHeader注解用於設置響應頭,與Controller中的方法並列使用。 屬性配置:


7) ApiImplicitParams注解用於方法上包含一組參數說明。

8) ApiImplicitParam注解用於描述請求參數,根據不同的paramType類型,請求的參數來源不同。屬性及取值如下:


9)  ApiModel注解用於表示對類進行說明,描述一個Model的信息,表示參數用實體類接收。

10)ApiModelProperty注解用於方法、字段,表示對model屬性的說明或者數據操作更改,配合ApiModel一起使用。

11)ApiIgnore注解用於類或方法上,表示不需要swagger處理。

Swagger提供的注解還有其他一些,此處不做解釋(而且高版本中的注解可能不太一樣),可以通過官方文檔或源碼查閱,基本常用的注解就是這些,詳細的使用方法可以網上查看。如果熟悉了這些注解就可以很快的表示后台代碼接口的信息,然后通過頁面的形式展示出來。但是swagger是如何結合spring通過簡單的配置、添加注解的方式就將接口的信息展現出來。下面將看看swagger為什么這么神奇。

 

相關閱讀:接口文檔神器Swagger(下篇)

網易雲大禮包:https://www.163yun.com/gift

本文來自網易雲社區,經作者李哲授權發布


相關文章:
【推薦】 大數據技術在金融行業的應用前景


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM