本文來自網易雲社區
作者:李哲
接口文檔管理一直是一個讓人頭疼的問題,伴隨着各種接口文檔管理平台涌現,如阿里開源的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
本文來自網易雲社區,經作者李哲授權發布
相關文章:
【推薦】 大數據技術在金融行業的應用前景