Dubbo微服務基于swagger自動生成文檔及測試調用

swagger簡介

swagger官方對其軟件定位于API構建工具茉帅。
它本身包含的功能很多网梢,官方給出的功能特點有:
API設計: 可以使用swagger提供的編輯工具酝碳,開發(fā)API的接口申明遂跟。
構建工具: 并通過反向工程生成各語言API接口的腳手架代碼蓬推。
文檔工具: 可以通過swagger的規(guī)范將代碼中的注釋生成格式化文檔。
測試工具: 可以通過使用swagger-ui工具俺抽,直接調用基于swagger規(guī)范開發(fā)的API接口進行測試敞映。
更多內容請訪問官網(wǎng)了解 [https://swagger.io/]

微服務基于swagger自動生成文檔原理

在微服務中通過引入swagger核心基礎組件磷斧,使用swagger的注解在微服務的接口和使用的模型上添加API規(guī)范說明振愿。
接口說明

@Deprecated
@Api(value = "XX平臺服務適配接口")
public interface MidSysServiceV2 {
    /**
     * xx接口
     *
     * @param channel
     *            調用渠道
     * @param mainRiskCode
     *            主險code
     * @param riskNo
     *            保單號
     * @param midSysOrderNo
     *            投保時的核心訂單號
     */
    @ApiOperation(value = "撤單接口", notes = "")
    public DubboResultV1<String> doOrderCancel(
            @ApiParam(name = "channel", value = "調用渠道", required = true) SourceChannel channel,
            @ApiParam(name = "mainRiskCode", value = "主險編碼", required = true) String mainRiskCode, 
            @ApiParam(name = "riskNo", value = "保單號", required = true) String riskNo,
            @ApiParam(name = "midSysOrderNo", value = "投保時的核心訂單號", required = true) String midSysOrderNo);

模型說明

@ApiModel(value="SourceChannel",description="渠道對象")
public enum SourceChannel {
    HXCP("hxcx", "小程序"),
    HXYD("hxyd", "移動官網(wǎng)"),
    HXGW("hxgw", "PC官網(wǎng)"),
    HXJDT("hxjdt", "經(jīng)代通");
    
    @ApiModelProperty(value = "渠道編碼", name = "code", example = "hxjdt")
    private String code;
    @ApiModelProperty(value = "渠道描述", name = "descript", example = "經(jīng)代通")
    private String descript;

在微服務啟動的時候,dubbo-swagger組件通過遍歷工作中dubbo的實現(xiàn)類弛饭。
通過反射機制獲取swagger的注解信息冕末,將注釋信息生成為基于json格式的元數(shù)據(jù)信息。

{"swagger":"2.0","info":{"version":"","title":"hxjk-haioums-provider-dev","contact":{"name":"yidonghulian-dev"}},"basePath":"/","paths":{"/h/com.ab.hxjk.haioums.dubbo.api.MidSysServiceV2/doNoCardPay":{"post":{"tags":["MidSysServiceV2"],"summary":"無卡支付接口","description":"DubboResultV1 
......

并且還為dubbo接口生成了REST風格的api,代理微服務的訪問侣颂。

Mapped "{[/h/{interfaceClass}/{methodName}],produces=[application/json;charset=utf-8]}" onto public org.springframework.http.ResponseEntity<java.lang.String> com.deepoove.swagger.dubbo.web.DubboHttpController.invokeDubbo(java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception

大概流程就是引入的組件中有一個controller類档桃,將REST請求中的json參數(shù),轉換為對應的POJO模型對象憔晒,并通過dubbo服務的消費方連接到自己提供的服務提供方藻肄,產生服務調用销凑。

配置

首先在微服務接口工程中引入swagger的核心包。

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-core</artifactId>
            <version>1.5.16</version>
        </dependency>       

為API接口及模型添加注解

常用注解有:

- @Api()用于類仅炊; 
表示標識這個類是swagger的資源 
- @ApiOperation()用于方法斗幼; 
表示一個http請求的操作 
- @ApiParam()用于方法,參數(shù)抚垄,字段說明蜕窿; 
表示對參數(shù)的添加元數(shù)據(jù)(說明或是否必填等) 
- @ApiModel()用于類 
表示對類進行說明,用于參數(shù)用實體類接收 
- @ApiModelProperty()用于方法呆馁,字段 
表示對model屬性的說明或者數(shù)據(jù)操作更改 
- @ApiIgnore()用于類桐经,方法,方法參數(shù) 
表示這個方法或者類被忽略 
- @ApiImplicitParam() 用于方法 
表示單獨的請求參數(shù) 
- @ApiImplicitParams() 用于方法浙滤,包含多個 @ApiImplicitParam

在微服務接口實現(xiàn)工程中引入swagger-dubbo包

        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>swagger-dubbo</artifactId>
            <version>2.0.1</version>
        </dependency>       

并在工程中添加對組件的配置(因為工程是springboot阴挣,所以是基于配置類來實現(xiàn)的配置。)

@DubboComponentScan(basePackages = { "com.ab.hxjk.haioums.dubbo" })  //dubbo實現(xiàn)類的路徑
@EnableDubboSwagger //生成api-docs及調用的REST接口
@Configuration
public class SwaggerConfig {

}

*備注:如果需要通過swagger-ui工程調用微服務工程swagger的REST接口纺腊,需要申請工程支付跨域調用 畔咧。

@Configuration
public class CorsConfig {
    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 設置你要允許的網(wǎng)站域名,如果全允許則設為 *
        config.addAllowedOrigin("*");
        // 如果要限制 HEADER 或 METHOD 請自行更改
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        // 這個順序很重要哦揖膜,為避免麻煩請設置在最前
        bean.setOrder(0);
        return bean;
    }
}

工程啟動以后就可以訪問swagger的REST接口了誓沸。

可以通過相對路徑/swagger-dubbo/api-docs獲取API的元數(shù)據(jù)信息。
也可以通過相對路徑/h/{DUBBO_SERVICE_INTERFACE_FULLPACKAGE_PATH}/{DUBBO_SERVICE_INTERFACE_METHOD}調用微服務壹粟。

配置swagger-ui

可以通過docker的現(xiàn)成鏡像swaggerapi/swagger-ui [https://hub.docker.com/r/swaggerapi/swagger-ui/]運行swagger-ui客戶端拜隧,或是通過下載工程[https://codeload.github.com/Sayi/swagger-dubbo/zip/master],將工程中的子項目swagger-dubbo-master\swagger-dubbo-example\dubbo-provider-springboot進行修改使用趁仙。該工程我已經(jīng)重構提交到http://gitlab.ab.com/JKX/HXYDHL/microservices/tree/master/swagger-dubbo-ui上了洪添。
下面是運行界面:
可以通過在swagger-ui的首頁中訪問微服務REST接口/api-docs,獲取接口API信息雀费。

swagger-dubbo-images1.png

也可以通過/api-docs返回的結果對微服務進行調用干奢。
swagger-dubbo-images2.png

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坐儿,隨后出現(xiàn)的幾起案子律胀,更是在濱河造成了極大的恐慌宋光,老刑警劉巖貌矿,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異罪佳,居然都是意外死亡逛漫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門赘艳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酌毡,“玉大人克握,你說我怎么就攤上這事〖咸ぃ” “怎么了菩暗?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旭蠕。 經(jīng)常有香客問我停团,道長,這世上最難降的妖魔是什么掏熬? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任佑稠,我火速辦了婚禮,結果婚禮上旗芬,老公的妹妹穿的比我還像新娘舌胶。我一直安慰自己,他們只是感情好疮丛,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布幔嫂。 她就那樣靜靜地躺著,像睡著了一般誊薄。 火紅的嫁衣襯著肌膚如雪婉烟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天暇屋,我揣著相機與錄音似袁,去河邊找鬼。 笑死咐刨,一個胖子當著我的面吹牛昙衅,可吹牛的內容都是我干的。 我是一名探鬼主播定鸟,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼而涉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了联予?” 一聲冷哼從身側響起啼县,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沸久,沒想到半個月后季眷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡卷胯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年子刮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窑睁。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡挺峡,死狀恐怖葵孤,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情橱赠,我是刑警寧澤尤仍,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站狭姨,受9級特大地震影響吓著,放射性物質發(fā)生泄漏。R本人自食惡果不足惜送挑,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一绑莺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惕耕,春花似錦纺裁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挤安,卻和暖如春谚殊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛤铜。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工嫩絮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人围肥。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓剿干,卻偏偏與公主長得像,于是被迫代替她去往敵國和親穆刻。 傳聞我的和親對象是個殘疾皇子置尔,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容