Spring Boot 2.x使用Swagger2構建強大的API文檔(一)

前言

隨著前後端分離架構和微服務架構的流行,我們使用Spring Boot來構建RESTful API項目的場景越來越多。通常我們的一個RESTful API就有可能要服務於多個不同的開發人員或開發團隊:IOS開發、Android開發、Web開發甚至其他的後端服務等。

相信無論是前端還是後端開發,都或多或少地被接口文檔折磨過。前端經常抱怨後端給的接口文檔與實際情況不一致。後端又覺得編寫及維護接口文檔會耗費不少精力,經常來不及更新

其實無論是前端調用後端,還是後端調用後端,都期望有一個好的接口文檔。但是這個接口文檔對於程序員來說,就跟註釋一樣,經常會抱怨別人寫的代碼沒有寫註釋,然而自己寫起代碼起來,最討厭的,也是寫註釋。所以僅僅只通過強制來規範大家是不夠的,隨著時間推移,版本迭代,接口文檔往往很容易就跟不上代碼了。

解決方案

為了解決上面這樣的問題,本文將介紹RESTful API的重磅

好夥伴Swagger2,它可以輕鬆的整合到Spring Boot中,並與Spring MVC程序配合組織出強大RESTful API文檔。它既可以減少我們創建文檔的工作量,同時說明內容又整合入實現代碼中,讓維護文檔和修改代碼整合為一體,可以讓我們在修改代碼邏輯的同時方便的修改文檔說明。另外Swagger2也提供了強大的頁面測試功能來調試每個RESTful API。具體效果如下圖所示:

Spring Boot 2.x使用Swagger2構建強大的API文檔(一)


基於Spring框架的Swagger流程應用

這裡暫不會介紹Swagger的工具具體如何使用,不會講yml或者json格式描述文件的語法規範,也不會講如何在SpringMVC或者Spring Boot中配置Springfox-swagger。這些都能從網上找到,而且配置起來都非常的簡單。

這裡想講的是如何結合現有的工具和功能,設計一個流程,去保證一個項目從開始開發到後面持續迭代的時候,以最小代價去維護代碼、接口文檔以及Swagger描述文件

項目開始階段

一般來說,接口文檔都是由服務端來編寫的。在項目開發階段的時候,服務端開發可以視情況來決定是直接編寫服務端調用層代碼,還是寫Swagger描述文件

建議是如果項目啟動階段,就已經搭好了後臺框架,那可以直接編寫服務端被調用層的代碼(即controller及其入參出參對象)

,然後通過Springfox-swagger 生成swagger json描述文件。

如果項目啟動階段並沒有相關後臺框架,而前端對接口文檔追得緊,那就建議先編寫swagger描述文件,通過該描述文件生成接口文檔。後續後臺框架搭好了,也可以生成相關的服務端代碼。

項目迭代階段

到這個階段,事情就簡單很多了。後續後臺人員,無需關注Swagger描述文件和接口文檔,有需求變更導致接口變化,直接寫代碼就好了。把調用層的代碼做個修改,然後生成新的描述文件和接口文檔後,給到前端即可。真正做到了一勞永逸。

推薦流程

Spring Boot 2.x使用Swagger2構建強大的API文檔(一)

上面的流程就是在開發階段,和我們的調用代碼一起編寫,一個調用接口編寫時,根據此接口的功能因為,入參和出參就可以定下來,這個時候我們就可以編寫swagger文檔,然後在編寫我們的實際代碼。

有的時候我們需要把文檔靜態化,導出html或pdf,就可以利用maven插件去實現

給Mock系統的正常請求及響應全流程數據

很多時候,如果你能在提供接口文檔的同時,把所有接口的模擬請求響應數據也提供給前端。或者有Mock系統,直接將這些模擬數據錄入到Mock系統中,那將會提高前端的開發效率,減少許多發生在聯調時候才會發生的問題

通過適當地在代碼中加入swagger的註解,可以讓你的接口文檔描述信息更加詳細,如果你把每個出入參數的示例值都配上,那前端就可以直接在接口文檔中拿到模擬數據。


如下:

Spring Boot 2.x使用Swagger2構建強大的API文檔(一)

Spring Boot 2.x使用Swagger2構建強大的API文檔(一)

Spring Boot 2.x使用Swagger2構建強大的API文檔(一)

通過example屬性,可以模擬請求數據報文,如下

Spring Boot 2.x使用Swagger2構建強大的API文檔(一)

上圖是請求參數的案例。

Spring Boot 2.x使用Swagger2構建強大的API文檔(一)

上圖是返回值的案例,非常清晰,還有相關的案例數據。

總結

其實歸根到底,使用Swagger,就是把相關的信息存儲在它定義的描述文件裡面(yml或json格式),再通過維護這個描述文件可以去更新接口文檔,以及生成各端代碼。

Springfox-swagger,則可以通過掃描代碼去生成這個描述文件,連描述文件都不需要再去維護了。所有的信息,都在代碼裡面了。代碼即接口文檔,接口文檔即代碼。

Spring Boot 2.x使用Swagger2構建強大的API文檔(一)


分享到:


相關文章: