<7>Spring Boot 使用Swagger2構建RESTful API

? ??????????????????Spring Boot 使用Swagger2構建RESTful API

主目錄:http://www.spring4all.com/article/246

轉載于:http://www.spring4all.com/article/251

由于Spring Boot能夠快速開發(fā)欢摄、便捷部署等特性灾螃,相信有很大一部分Spring Boot的用戶會用來構建RESTful API。而我們構建RESTful API的目的通常都是由于多終端的原因采章,這些終端會共用很多底層業(yè)務邏輯俯树,因此我們會抽象出這樣一層來同時服務于多個移動端或者Web前端。

這樣一來,我們的RESTful API就有可能要面對多個開發(fā)人員或多個開發(fā)團隊:IOS開發(fā)综液、Android開發(fā)或是Web開發(fā)等。為了減少與其他團隊平時開發(fā)期間的頻繁溝通成本儒飒,傳統(tǒng)做法我們會創(chuàng)建一份RESTful API文檔來記錄所有接口細節(jié)谬莹,然而這樣的做法有以下幾個問題:

由于接口眾多,并且細節(jié)復雜(需要考慮不同的HTTP請求類型桩了、HTTP頭部信息附帽、HTTP請求內容等),高質量地創(chuàng)建這份文檔本身就是件非常吃力的事井誉,下游的抱怨聲不絕于耳蕉扮。

隨著時間推移,不斷修改接口實現(xiàn)的時候都必須同步修改接口文檔颗圣,而文檔與代碼又處于兩個不同的媒介喳钟,除非有嚴格的管理機制屁使,不然很容易導致不一致現(xiàn)象。

為了解決上面這樣的問題奔则,本文將介紹RESTful API的重磅好伙伴Swagger2蛮寂,它可以輕松的整合到Spring Boot中,并與Spring MVC程序配合組織出強大RESTful API文檔易茬。它既可以減少我們創(chuàng)建文檔的工作量酬蹋,同時說明內容又整合入實現(xiàn)代碼中,讓維護文檔和修改代碼整合為一體抽莱,可以讓我們在修改代碼邏輯的同時方便的修改文檔說明范抓。另外Swagger2也提供了強大的頁面測試功能來調試每個RESTful API。具體效果如下圖所示:


下面來具體介紹岸蜗,如果在Spring Boot中使用Swagger2尉咕。首先,我們需要一個Spring Boot實現(xiàn)的RESTful API工程璃岳,若您沒有做過這類內容年缎,建議先閱讀

Spring Boot構建一個較為完成的RESTful APIs和單元測試

下面的內容我們會以教程樣例中的Chapter3-1-1進行下面的實驗(Chpater3-1-5是我們的結果工程铃慷,亦可參考;

添加Swagger2依賴

在pom.xml中加入Swagger2的依賴

<!-- swagger -->

<dependency>

????<groupId>io.springfox</groupId>

? ? <artifactId>springfox-swagger2</artifactId>

? ? <version>2.8.0</version>

</dependency>

<dependency>

? ? <groupId>io.springfox</groupId>

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

? ? <version>2.8.0</version>

</dependency>


創(chuàng)建Swagger2配置類

在Application.java同級創(chuàng)建Swagger2的配置類Swagger2单芜;


如上代碼所示,通過@Configuration注解犁柜,讓Spring來加載該類配置洲鸠。再通過@EnableSwagger2注解來啟用Swagger2。

再通過createRestApi函數(shù)創(chuàng)建Docket的Bean之后馋缅,apiInfo()用來創(chuàng)建該Api的基本信息(這些基本信息會展現(xiàn)在文檔頁面中)扒腕。select()函數(shù)返回一個ApiSelectorBuilder實例用來控制哪些接口暴露給Swagger來展現(xiàn),本例采用指定掃描的包路徑來定義萤悴,Swagger會掃描該包下所有Controller定義的API瘾腰,并產(chǎn)生文檔內容(除了被@ApiIgnore指定的請求);

添加文檔內容

在完成了上述配置后,其實已經(jīng)可以生產(chǎn)文檔內容覆履,但是這樣的文檔主要針對請求本身蹋盆,而描述主要來源于函數(shù)等命名產(chǎn)生,對用戶并不友好硝全,我們通常需要自己增加一些說明來豐富文檔內容栖雾。如下所示,我們通過@ApiOperation注解來給API增加說明伟众、通過@ApiImplicitParams析藕、@ApiImplicitParam注解來給參數(shù)增加說明;



接下面


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


API文檔訪問與調試

在上圖請求的頁面中意狠,我們看到user的Value是個輸入框闷板?是的遮晚,Swagger除了查看接口功能外县遣,還提供了調試測試功能顶瞒,我們可以點擊上圖中右側的Model Schema(黃色區(qū)域:它指明了User的數(shù)據(jù)結構),此時Value中就有了user對象的模板箕速,我們只需要稍適修改,點擊下方“Try it out探越!”按鈕常柄,即可完成了一次請求調用西潘!

此時相种,你也可以通過幾個GET請求來驗證之前的POST請求是否正確。

相比為這些接口編寫文檔的工作食茎,我們增加的配置內容是非常少而且精簡的惧互,對于原有代碼的侵入也在忍受范圍之內拨与。因此买喧,在構建RESTful API的同時,加入swagger來對API文檔進行管理匆赃,是個不錯的選擇淤毛。

完整結果示例可查看Chapter3-1-5

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市算柳,隨后出現(xiàn)的幾起案子低淡,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔗蹋,死亡現(xiàn)場離奇詭異何荚,居然都是意外死亡,警方通過查閱死者的電腦和手機猪杭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門餐塘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胁孙,你說我怎么就攤上這事唠倦。” “怎么了涮较?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵稠鼻,是天一觀的道長。 經(jīng)常有香客問我狂票,道長候齿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任闺属,我火速辦了婚禮慌盯,結果婚禮上,老公的妹妹穿的比我還像新娘掂器。我一直安慰自己亚皂,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布国瓮。 她就那樣靜靜地躺著灭必,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乃摹。 梳的紋絲不亂的頭發(fā)上禁漓,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機與錄音孵睬,去河邊找鬼播歼。 笑死,一個胖子當著我的面吹牛掰读,可吹牛的內容都是我干的秘狞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蹈集,長吁一口氣:“原來是場噩夢啊……” “哼谒撼!你這毒婦竟也來了?” 一聲冷哼從身側響起雾狈,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抵皱,沒想到半個月后善榛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辩蛋,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年移盆,在試婚紗的時候發(fā)現(xiàn)自己被綠了悼院。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咒循,死狀恐怖据途,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情叙甸,我是刑警寧澤颖医,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站裆蒸,受9級特大地震影響熔萧,放射性物質發(fā)生泄漏。R本人自食惡果不足惜僚祷,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一佛致、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辙谜,春花似錦俺榆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烂琴,卻和暖如春爹殊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奸绷。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工梗夸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人号醉。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓反症,卻偏偏與公主長得像,于是被迫代替她去往敵國和親畔派。 傳聞我的和親對象是個殘疾皇子铅碍,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容