在Spring Cloud中使用Swagger自動構建API接口文檔

簡介

Swagger 是一個可以用來構建API服務文檔的工具,并且API文檔可以和代碼服務實時更新,保持一致,提供了UI界面可以直接查看文檔。同時還可以進行功能測試。

在Spring Boot項目中集成使用

1.新建項目并添加相關依賴

  • Springfox-swagger2
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.4.0</version>
</dependency>
  • Springfox-swagger2-ui
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2-ui</artifactId>
    <version>2.4.0</version>
</dependency>

2.添加配置類

@EnableSwagger2
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                // 當前包路徑
               .apis(RequestHandlerSelectors.basePackage("cn.leon.leonswagger.controller"))
                .paths(PathSelectors.any())
                .build();

    }
    //構建api文檔的詳細信息函數
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //頁面標題
                .title("Leon測試Swagger")
                //創建人
                .contact(new Contact("Leon", "http://www.dujinghua.cn", ""))
                //版本號
                .version("1.0")
                //描述
                .description("API 描述")
                .build();
    }
}

3.為服務類添加注解

為提供接口服務的Controller類添加注解:@Api

@Api("swagger測試相關api")
public class LeonController {

}

4.為方法添加注解

在上面創建的LeonController類中添加方法,并在方法上添加相關注解:

/**
 * Get請求測試
 */
@ApiOperation(value = "根據id查詢商品詳情", notes = "查詢某個商品的詳細信息")
@ApiImplicitParam(name = "id", value = "商品id", paramType = "path", required = true, dataType ="String")
@ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "用戶id", dataType = "String", paramType = "path", example = "1112")
})
@ApiResponses({
        @ApiResponse(code = 500, message = "服務器內部錯誤"),
        @ApiResponse(code = 404, message = "找不到請求路徑")
})
@RequestMapping(value = "getGoods/{id}", method = RequestMethod.GET)
public String GetGoods(@PathVariable String id) {
    return "Leon-商品ID : " + id;
}

5.訪問文檔

運行項目,訪問地址:http://localhost:8080/swagger-ui.html 可以看到如下界面:

1.png

點擊leon-controller可以看到方法的描述:

2.png

詳細參數介紹

@EnableSwagger2 @Configuration

配置類需要添加的注解,聲明為Swagger

@ApiOperation

指定接口方法的說明,如果方法不加此注解,說明默認為方法名稱:


3.png

@ApiImplicitParams @ApiImplicitParam

接口詳細描述的參數信息:


4.png

其中 ApiImplicitParam 為具體的參數,里面的配置 paramType 需要注意:

paramType代表參數放在哪個地方

  • header-->請求參數的獲取:@RequestHeader
  • query-->請求參數的獲取:@RequestParam
  • path(用于restful接口)-->請求參數的獲取:@PathVariable
  • body(不常用)
  • form(不常用)

@ApiResponses

接口返回信息描述:


5.png

測試

除了用作靜態接口文檔,swagger還可以進行測試,直接看到接口調用的返回結果,在參數中輸入數值,然后點擊 try it out 按鈕,就可以查看詳細調用結果:

6.png

注:如果發現請求返回結果有問題,可以先查看請求的完整地址,是否是正確的格式

如果接口方法中不加任何描述,那么會按照方法的參數默認生成描述,并且參數都是必須的(requeired),測試的不輸入參數會提示報錯:


7.png

返回json數據

目前接口返回一般都是json數據,在Swagger中,可以指定返回為json格式數據,在ApiOperation注解中添加produces:

 @ApiOperation(value = "根據id查詢商品詳情", notes = "查詢某個商品的詳細信息",produces = "application/json")

然后就可以看到:


8.png

在項目中添加JSON依賴:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.0</version>
</dependency>

然后返回數據時返回json格式數據:

@RequestMapping(value = "getGoods/{id}", method = RequestMethod.GET)
public String GetGoods(@PathVariable String id) {
    String info = "Leon-商品ID : " + id;
    JsonObject jsonObject = new JsonObject();
    jsonObject.addProperty("info", info);
    return jsonObject.toString();
}

重新在Swagger頁面中測試,可以看到返回結果為json:


9.png

在Spring Cloud項目中集成使用

在Spring Cloud中我們的服務都會注冊在Eureka Server中,如下所示:


10.png

此時當我們點擊紅框中的服務時,返回的是空,無法查看具體的服務信息,接下來在Spring Cloud集成Swagger。
首先為注冊到Eureka Server上的服務添加配置:

eureka:
  client:
    service-url:
      defaultZone: http://root:123456@localhost:7776/eureka/
  instance:
    status-page-url: http://localhost:${server.port}/swagger-ui.html

然后重啟服務重新注冊即可,然后在注冊中心的界面,點擊該服務就可以自動跳轉到Swagger文檔主頁面

替代產品

除了使用Swagger提供項目API文檔,還有其他一些不錯的選擇。Swagger的好處是可以根據代碼變動隨時更新內容并且可以測試,但是也有一些不太方便的地方:

  • 和代碼耦合在一起,是代碼看起來比較臃腫
  • 如果代碼沒有寫完,那么接口文檔就無法完成
  • 項目服務啟動才能訪問接口文檔,如果是公司內網開發,離開環境就無法查看。或者后端開發停掉服務,前端開發就看不到文檔了

這里介紹幾種其他的接口文檔方案,具體選中哪種每個團隊都會有不同的選擇:

Easy Mock

https://easy-mock.com/login
是一個可視化,并且能快速生成模擬數據的服務。可以在線生成模擬接口,能夠隨機產生數據,也支持結合Swagger使用

11.png

YApi

https://yapi.ymfe.org/
可視化操作配置,同樣非常方便

12.png

RAP

http://rapapi.org/org/index.do
阿里媽媽前端團隊出品的開源接口管理工具RAP第二代

13.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,247評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,520評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,362評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,805評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,541評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,896評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,887評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,062評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,608評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,356評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,555評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,077評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,769評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,175評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,489評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,289評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,516評論 2 379

推薦閱讀更多精彩內容