學習目标:
了解Swagger的概念及作用
掌握在項目中內建Swagger自動生成API文檔
前後端分離
前端 -> 前端控制層、視圖層
後端 -> 後端控制層、服務層、資料通路層
前後端通過API進行互動
前後端相對獨立且松耦合
産生的問題
前後端內建,前端或者後端無法做到“及時協商,盡早解決”,最終導緻問題集中爆發
解決方案
首先定義schema [ 計劃的提綱 ],并實時跟蹤最新的API,降低內建風險
Swagger
号稱世界上最流行的API架構
Restful Api 文檔線上自動生成器 => API 文檔 與API 定義同步更新
直接運作,線上測試API
支援多種語言 (如:Java,PHP等)
官網:https://swagger.io/
SpringBoot內建Swagger => springfox,兩個jar包
Springfox-swagger2
springfox-swagger-ui
使用Swagger
要求:jdk 1.8 + 否則swagger2無法運作;springboot版本2.1.7.RELEASE
步驟:
1、建立一個SpringBoot-web項目
2、添加Maven依賴
3、編寫HelloController,測試確定運作成功!
4、要使用Swagger,我們需要編寫一個配置類-SwaggerConfig來配置 Swagger
5、通路測試 :http://localhost:8080/swagger-ui.html ,可以看到swagger的界面;
1、Swagger執行個體Bean是Docket,是以通過配置Docket執行個體來配置Swaggger。
2、可以通過apiInfo()屬性配置文檔資訊
3、Docket 執行個體關聯上 apiInfo()
4、重新開機項目,通路測試 http://localhost:8080/swagger-ui.html 看下效果;
1、建構Docket時通過select()方法配置怎麼掃描接口。
2、重新開機項目測試,由于我們配置根據包的路徑掃描接口,是以我們隻能看到一個類
3、除了通過包路徑配置掃描接口外,還可以通過配置其他方式掃描接口,這裡注釋一下所有的配置方式:
4、除此之外,我們還可以配置接口掃描過濾:
5、這裡的可選值還有
1、通過enable()方法配置是否啟用swagger,如果是false,swagger将不能在浏覽器中通路了
2、如何動态配置當項目處于test、dev環境時顯示swagger,處于prod時不顯示?
3、配置檔案 <code>application.properties</code>
配置檔案``application-dev.properties`
配置檔案<code>application-pro.properties</code>
4、通路<code>http://localhost:8081/swagger-ui.html</code>測試一下,可正常通路,将 <code>application.properties</code> 檔案改成
<code>spring.profiles.active=pro</code>,通路<code>http://localhost:8082/swagger-ui.html</code>測試一下,效果如下圖:
1、如果沒有配置分組,預設是default。通過groupName()方法即可配置分組:
2、重新開機項目檢視分組
3、如何配置多個分組?配置多個分組隻需要配置多個docket即可:
4、重新開機項目檢視即可
1、建立一個實體類
2、隻要這個實體在請求接口的傳回值上(即使是泛型),都能映射到實體項中:
3、重新開機檢視測試
注:并不是因為@ApiModel這個注解讓實體顯示在這裡了,而是隻要出現在接口方法的傳回值上的實體都會顯示在這裡,而@ApiModel和@ApiModelProperty這兩個注解隻是為實體添加注釋的。
@ApiModel為類添加注釋
@ApiModelProperty為類屬性添加注釋
Swagger的所有注解定義在io.swagger.annotations包下
下面列一些經常用到的,未列舉出來的可以另行查閱說明:
Swagger注解
簡單說明
@Api(tags = "xxx子產品說明")
作用在子產品類上
@ApiOperation("xxx接口說明")
作用在接口方法上
@ApiModel("xxxPOJO說明")
作用在模型類上:如VO、BO
@ApiModelProperty(value = "xxx屬性說明",hidden = true)
作用在類方法和屬性上,hidden設定為true可以隐藏該屬性
@ApiParam("xxx參數說明")
作用在參數、方法和字段上,類似@ApiModelProperty
我們也可以給請求的接口配置一些注釋
這樣的話,可以給一些比較難了解的屬性或者接口,增加一些配置資訊,讓人更容易閱讀!
相較于傳統的Postman或Curl方式測試接口,使用swagger簡直就是傻瓜式操作,不需要額外說明文檔(寫得好本身就是文檔)而且更不容易出錯,隻需要錄入資料然後點選Execute,如果再配合自動化架構,可以說基本就不需要人為操作了。
Swagger是個優秀的工具,現在國内已經有很多的中小型網際網路公司都在使用它,相較于傳統的要先出Word接口文檔再測試的方式,顯然這樣也更符合現在的快速疊代開發行情。當然了,提醒下大家在正式環境要記得關閉Swagger,一來出于安全考慮二來也可以節省運作時記憶體。
我們可以導入不同的包實作不同的皮膚定義:
1、預設的 通路 http://localhost:8080/swagger-ui.html
2、bootstrap-ui 通路 http://localhost:8080/doc.html
3、mg-ui 通路 http://localhost:8080/document.html
4、Layui-ui 通路 http://localhost:8080/docs.html
注意:Layui-ui 不能分組,否則打不開頁面