swagger
一、簡介
Swagger是一種REST APIs的簡單但強大的表示方式叫倍,標(biāo)準(zhǔn)的偷卧,語言無關(guān),這種表示方式不但人可讀吆倦,而且機器可讀听诸。可以作為REST APIs的交互式文檔蚕泽,也可以作為REST APIs的形式化的接口描述晌梨,生成客戶端和服務(wù)端的代碼。
docs : swagger docs
二须妻、為什么選擇Swagger
- 使用Swagger UI生成的界面比Javadoc生成的界面美觀
- swagger可以實時同步API文檔(代碼修改后仔蝌,文檔同步修改)
- swagger解析速度快,效率高(使用輕量級數(shù)據(jù)交換格式JSON)
- 對現(xiàn)有SpringMVC工程支持友好
- Swagger可以充當(dāng)前后端交流的重要橋梁荒吏,方便快捷敛惊。很實用。
- Swagger項目允許你生產(chǎn)司倚,顯示和消費你自己的RESTful服務(wù)豆混。不需要代理和第三方服務(wù)。是一個依賴自由的資源集合动知,它能通過Swagger API動態(tài)的生成漂亮的文檔和沙盒,因為Swagger UI沒有依賴皿伺,你可以把他部署到任何服務(wù)器環(huán)境或者是你自己的機器。
三盒粮、如何使用Swagger
3.1Swagger UI簡介
Swagger UI是Swagger中用于顯示Rest接口文檔的項目鸵鸥,項目由一組HTML,JavaScript和CSS組成,沒有外部依賴妒穴。Swagger UI可以根據(jù)Swagger Spec的json動態(tài)生成漂亮的幫助文檔宋税。支持常見瀏覽器。
(Swagger Spec是Swagger用于描述REST APIs的語言讼油,可用json/yaml表示)
了解更多
1杰赛、支持API自動生成同步的在線文檔,這些文檔可用于項目內(nèi)部API審核方便測試人員了解API
2矮台、這些文檔可作為客戶產(chǎn)品文檔的一部分進行發(fā)布
3乏屯、支持API規(guī)范生成代碼,生成的客戶端和服務(wù)器端骨架代碼可以加速開發(fā)和測試速度
3.2開發(fā)步驟
①添加依賴
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
其中swagger.version
自由控制
②寫Java配置類
@PropertySource("classpath:swagger.properties")
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
注解/方法 | 說明 |
---|---|
@PropertySource |
重寫Swagger訪問路徑瘦赫,默認(rèn)的是/v2/api-docs |
@Configuration |
將這個類注入到Spring中并視作配置類 |
@EnableSwagger2 |
使Swagger2在工程中可用 |
swagger.preoperties |
springfox.documentation.swagger.v2.path=/my/api-docs |
DocumentationType.SWAGGER_2 |
默認(rèn)final類型辰晕,自帶屬性name=swagger version=2.0 |
select() |
返回一個ApiSelectorBuilder的實例,提供一種控制Swagger發(fā)布的方式 |
apis() |
解析范圍控制确虱,例如.apis(RequestHandlerSelectors.basePackage("com.example.controller"))
|
paths() |
解析路徑控制含友,通過any(),none(),regex(),或者ant()來控制,例如path(PathSelectors.ant("/foos/*"))
|
build() |
生成Docket對象 |
③集成Swagger UI到工程中
1.從github上下載swagger-ui的zip包
2.復(fù)制dist文件夾下的內(nèi)容到webapp目錄下
3.修改index.xml的預(yù)訪問地址為自定義的
4.修改web.xml文件中過濾器的匹配路徑為/
5.因為swagger-ui項目都是靜態(tài)資源校辩,restful形式的攔截方法會將靜態(tài)資源進行攔截處理窘问,所以在springmvc配置文件中需要配置對靜態(tài)文件的處理方式。
<mvc:default-servlet-handler/>
此舉是為了體驗最新版的swagger-ui召川,并且可以高度自定義內(nèi)容南缓,其實在springfox-swagger-ui中已經(jīng)集成了大多數(shù)資源胸遇,如html頁面和js文件等荧呐,當(dāng)存在注解@EnableSwagger2
時,就可以使用http://ip:host/swagger-ui.html查看接口文檔
3.3注解說明
Javadocs for annotations with the current release are here
本文只簡單介紹常用的部分注解及其屬性
注解名 | 常用屬性 | 使用描述 |
---|---|---|
@Api |
description纸镊、basepath倍阐、position已過時(deprecated) String[] tags 描述類,可以對該資源(控制器類)下的操作(函數(shù))進行分類,列表中每個tag為一類 String value 描述類逗威,會被tags覆蓋峰搪,1.5版本后推薦使用tags String produces 描述內(nèi)容類型,如 application/json, application/xml boolean hidden 是否隱藏資源下的操作 |
使一個類成為Swagger資源凯旭,一般標(biāo)在控制器上概耻,與@Controller 同級 |
@ApiOperation |
String value required 簡單描述此操作 boolean hidden 是否隱藏此操作 String nickName 相當(dāng)于 operationId Class<?> response 返回類型 String notes 描述信息 |
標(biāo)在操作上 |
@ApiParam |
String name 參數(shù)名,如果不寫會從地址中找/field/method/parameter name String value 簡明描述 String required 是否必須 |
標(biāo)在操作中的參數(shù)上 |
@ApiModel |
String value 實體類名字描述罐呼,默認(rèn)為類名 String description 簡單描述實體類 Class<?> parent 提供一個父類鞠柄,以便于描述繼承 |
標(biāo)在實體類上,描述實體類的信息嫉柴,如果不標(biāo)厌杜,但是在操作中用到了相關(guān)實體類,該實體類會被自動標(biāo)注,屬性信息為默認(rèn)描述 |
@ApiModelProperty |
String value 簡明描述 String name 名字 String allowableValues 允許的值夯尽,兩種寫法瞧壮,枚舉式: {first,second,third} ,區(qū)間式:range[1,5],可開可閉匙握,無窮用infinity表示 String dataType 數(shù)據(jù)類型咆槽,可以是類名或者簡單類型,會覆蓋掉讀取到的類型 boolean required 參數(shù)是否必須 boolean readOnly 是否只讀 String example 舉例子 boolean allowEmptyValue 允許空值 |
標(biāo)在實體類的屬性上 |
@ApiImplicitParam |
類似ApiParam | 用于使用Servlet或者無JAX-RS環(huán)境時圈纺,或者@ApiParam 被占用罗晕,可以手動聲明單個參數(shù) |
@ApiResponse |
int code HTTP狀態(tài)碼,required String message 關(guān)于此狀態(tài)碼的相關(guān)描述赠堵,required |
標(biāo)在操作上小渊,但是推薦用@ApiOperation 來描述返回信息 |