Swagger簡(jiǎn)介

Swagger 是一款RESTFUL接口的文檔在線自動(dòng)生成+功能測(cè)試功能軟件。本文簡(jiǎn)單介紹了在項(xiàng)目中集成swagger的方法和一些常見(jiàn)問(wèn)題。 如果想深入分析項(xiàng)目源碼临扮,了解更多內(nèi)容,見(jiàn)參考資料。Swagger 是一個(gè)規(guī)范和完整的框架佩番,用于生成、描述罢杉、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)趟畏。總體目標(biāo)是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來(lái)更新滩租。文件的方法赋秀,參數(shù)和模型緊密集成到服務(wù)器端的代碼利朵,允許API來(lái)始終保持同步。Swagger 讓部署管理和使用功能強(qiáng)大的API從未如此簡(jiǎn)單沃琅。

歡迎訪問(wèn)本人博客:http://wangnan.tech

使用介紹

什么是swagger

Swagger?的目標(biāo)是為REST APIs 定義一個(gè)標(biāo)準(zhǔn)的哗咆,與語(yǔ)言無(wú)關(guān)的接口,使人和計(jì)算機(jī)在看不到源碼或者看不到文檔或者不能通過(guò)網(wǎng)絡(luò)流量檢測(cè)的情況下能發(fā)現(xiàn)和理解各種服務(wù)的功能益眉。當(dāng)服務(wù)通過(guò)Swagger定義晌柬,消費(fèi)者就能與遠(yuǎn)程的服務(wù)互動(dòng)通過(guò)少量的實(shí)現(xiàn)邏輯。類似于低級(jí)編程接口郭脂,Swagger去掉了調(diào)用服務(wù)時(shí)的很多猜測(cè)年碘。 瀏覽 Swagger-Spec 去了解更多關(guān)于Swagger 項(xiàng)目的信息,包括附加的支持其他語(yǔ)言的庫(kù)展鸡。

如何集成Swagger-springmvc到我們的項(xiàng)目中?

Maven

<dependency>
    <groupId>com.mangofactory</groupId>
    <artifactId>swagger-springmvc</artifactId>
    <version>0.9.4</version>
</dependency>

Gradle

repositories {
jcenter()
}
compile "com.mangofactory:swagger-springmvc:0.9.4"

要最快捷地啟動(dòng)swagger-springmvc項(xiàng)目并且使用默認(rèn)設(shè)置屿衅,推薦的方式是使用SwaggerSpringMvc插件

Spring Java Configuration

@Configuration
@EnableWebMvc
@EnableSwagger
@ComponentScan("com.myapp.packages")
public class WebAppConfig {
 ...
}

Spring xml Configuration

<mvc:annotation-driven/> <!-- Required so swagger-springmvc can access spring's RequestMappingHandlerMapping  -->
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />

SwaggerSpringMvcPlugin XML Configuration

為了使用這個(gè)插件,你需要?jiǎng)?chuàng)造一個(gè)spring Java配置類莹弊。使用spring的 @Configuration 涤久,這個(gè)配置類必須被定義到你的xml上下文

<!-- Required so swagger-springmvc can access spring's RequestMappingHandlerMapping  -->
<mvc:annotation-driven/>
bean class="com.yourapp.configuration.MySwaggerConfig"/>
@Configuration
@EnableSwagger //Loads the spring beans required by the framework
public class MySwaggerConfig {

private SpringSwaggerConfig springSwaggerConfig;

/**
* Required to autowire SpringSwaggerConfig
*/
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
  this.springSwaggerConfig = springSwaggerConfig;
}

/**
* Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc framework - allowing for multiple
* swagger groups i.e. same code base multiple swagger resource listings.
 */
@Bean
public SwaggerSpringMvcPlugin customImplementation(){
  return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
          .includePatterns(".*pet.*");
}

}

SwaggerSpringMvcPlugin Spring Java Configuration

使用@EnableSwagger注解
自動(dòng)注入SpringSwaggerConfig
定義一個(gè)或多個(gè)SwaggerSpringMvcPlugin實(shí)例,通過(guò)springs @Bean注解

@Configuration
@EnableWebMvc
@EnableSwagger
@ComponentScan("com.myapp.controllers")
public class CustomJavaPluginConfig {

private SpringSwaggerConfig springSwaggerConfig;

@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
  this.springSwaggerConfig = springSwaggerConfig;
}

@Bean //Don't forget the @Bean annotation
public SwaggerSpringMvcPlugin customImplementation(){
  return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
        .apiInfo(apiInfo())
        .includePatterns(".*pet.*");
}

private ApiInfo apiInfo() {
  ApiInfo apiInfo = new ApiInfo(
          "My Apps API Title",
          "My Apps API Description",
          "My Apps API terms of service",
          "My Apps API Contact Email",
          "My Apps API Licence Type",
          "My Apps API License URL"
    );
  return apiInfo;
}
}

碰到的問(wèn)題

關(guān)于@API注解

在Swagger Annotation中:

API表示一個(gè)開(kāi)放的API忍弛,可以通過(guò)description簡(jiǎn)要描述該API的功能响迂。
在一個(gè)@API下,可有多個(gè)@ApiOperation细疚,表示針對(duì)該API的CRUD操作蔗彤。在ApiOperation Annotation中可以通過(guò)value,notes描述該操作的作用疯兼,response描述正常情況下該請(qǐng)求的返回對(duì)象類型然遏。 在一個(gè)ApiOperation下,可以通過(guò)ApiResponses描述該API操作可能出現(xiàn)的異常情況吧彪。

ApiParam用于描述該API操作接受的參數(shù)類型
再接著待侵,為項(xiàng)目的Model對(duì)象添加Swagger Annotation,這樣Swagger Scanner可以獲取更多關(guān)于Model對(duì)象的信息姨裸。

@ApiModel(value = "A SayingRepresentation is a representation of greeting")
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class SayingRepresentation {
private long id;
@ApiModelProperty(value = "greeting content", required = true)
private String content;

public SayingRepresentation(long id, String content) {
    this.id = id;
    this.content = content;
}

public long getId() {
    return id;
}

public String getContent() {
    return content;
}

通過(guò)上面的步驟诫给,項(xiàng)目已經(jīng)具備了提供Swagger格式的API信息的能力,接下來(lái)啦扬,我們把這些信息和Swagger UI集成中狂,以非常美觀,實(shí)用的方式把這些API信息展示出來(lái)扑毡。

和Swagger UI的集成

首先胃榕,從github(https://github.com/wordnik/swagger-ui)上下載Swagger-UI, 把該項(xiàng)目dist目錄下的內(nèi)容拷貝到項(xiàng)目的resources的目錄assets下。

然后,修改index.html, 把Swagger UI對(duì)象中的URL替換為自己的API路徑勋又。

  window.swaggerUi = new SwaggerUi({
  url: "/api/api-docs",
  dom_id: "swagger-ui-container",

最后苦掘,為了能訪問(wèn)到該頁(yè)面,還需要在Service的Initialize方法中楔壤,添加AssetsBundle

public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) {
    //指定配置文件的名字
    bootstrap.setName("helloWorld");
    bootstrap.addBundle(new AssetsBundle("/assets", "/", "index.html"));
}

最后的效果圖:

評(píng)價(jià)

Swagger可以充當(dāng)前后端交流的重要橋梁鹤啡,方便快捷。很實(shí)用蹲嚣。

Swagger項(xiàng)目允許你生產(chǎn)递瑰,顯示和消費(fèi)你自己的RESTful服務(wù)。不需要代理和第三方服務(wù)隙畜。是一個(gè)依賴自由的資源集合抖部,它能通過(guò)Swagger API動(dòng)態(tài)的生成漂亮的文檔和沙盒,因?yàn)镾wagger UI沒(méi)有依賴,你可以把他部署到任何服務(wù)器環(huán)境或者是你自己的機(jī)器议惰。

參考資料

官網(wǎng):http://swagger.io/

GitHub:
swagger-springmvc:https://github.com/martypitt/swagger-springmvc

swagger-ui:https://github.com/swagger-api/swagger-ui

swagger-core:https://github.com/swagger-api/swagger-core

swagger-spec:https://github.com/swagger-api/swagger-spec

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慎颗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子言询,更是在濱河造成了極大的恐慌俯萎,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件运杭,死亡現(xiàn)場(chǎng)離奇詭異夫啊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)县习,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谆趾,“玉大人躁愿,你說(shuō)我怎么就攤上這事』ε睿” “怎么了彤钟?”我有些...
    開(kāi)封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)跷叉。 經(jīng)常有香客問(wèn)我逸雹,道長(zhǎng),這世上最難降的妖魔是什么云挟? 我笑而不...
    開(kāi)封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任梆砸,我火速辦了婚禮,結(jié)果婚禮上园欣,老公的妹妹穿的比我還像新娘帖世。我一直安慰自己,他們只是感情好沸枯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布日矫。 她就那樣靜靜地躺著赂弓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哪轿。 梳的紋絲不亂的頭發(fā)上盈魁,一...
    開(kāi)封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音窃诉,去河邊找鬼杨耙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛褐奴,可吹牛的內(nèi)容都是我干的按脚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼敦冬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辅搬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起脖旱,我...
    開(kāi)封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤堪遂,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后萌庆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溶褪,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年践险,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猿妈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡巍虫,死狀恐怖彭则,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情占遥,我是刑警寧澤俯抖,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瓦胎,受9級(jí)特大地震影響芬萍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搔啊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一柬祠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧负芋,春花似錦瓶盛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芝硬。三九已至,卻和暖如春轧房,著一層夾襖步出監(jiān)牢的瞬間拌阴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工奶镶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迟赃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓厂镇,卻偏偏與公主長(zhǎng)得像纤壁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捺信,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理酌媒,服務(wù)發(fā)現(xiàn),斷路器迄靠,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,827評(píng)論 6 342
  • swagger 了解更多 一秒咨、簡(jiǎn)介 Swagger是一種REST APIs的簡(jiǎn)單但強(qiáng)大的表示方式,標(biāo)準(zhǔn)的掌挚,語(yǔ)言無(wú)關(guān)...
    阿琦zzz閱讀 4,686評(píng)論 1 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評(píng)論 25 707
  • 在我老家的房子左邊有一雜草叢生的小山坡雨席。山坡不高,僅有兩三百米吠式,坡上除了雜草和樹木就是一條只可供一人行走的狹窄小路...
    ld熊壯壯閱讀 356評(píng)論 0 0