成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Cloud Zuul中使用Swagger匯總API接口文檔

Salamander / 882人閱讀

摘要:代碼示例本文示例讀者可以通過查看下面?zhèn)}庫的中的三個(gè)項(xiàng)目如果您對(duì)這些感興趣,歡迎收藏轉(zhuǎn)發(fā)給予支持以下專題教程也許您會(huì)有興趣基礎(chǔ)教程基礎(chǔ)教程

有很多讀者問過這樣的一個(gè)問題:雖然使用Swagger可以為Spring MVC編寫的接口生成了API文檔,但是在微服務(wù)化之后,這些API文檔都離散在各個(gè)微服務(wù)中,是否有辦法將這些接口都整合到一個(gè)文檔中?之前給大家的回復(fù)都只是簡單的說了個(gè)思路,昨天正好又有人問起,索性就舉個(gè)例子寫成博文供大家參考吧。

如果您還不了解Spring Cloud ZuulSwagger,建議優(yōu)先閱讀下面兩篇,有一個(gè)初步的了解:

Spring Cloud構(gòu)建微服務(wù)架構(gòu):服務(wù)網(wǎng)關(guān)(基礎(chǔ))

Spring Boot中使用Swagger2構(gòu)建強(qiáng)大的RESTful API文檔

本文首發(fā)于:http://blog.didispace.com/Spr...
準(zhǔn)備工作

上面說了問題的場景是在微服務(wù)化之后,所以我們需要先構(gòu)建兩個(gè)簡單的基于Spring Cloud的微服務(wù),命名為swagger-service-aswagger-service-b

下面只詳細(xì)描述一個(gè)服務(wù)的構(gòu)建內(nèi)容,另外一個(gè)只是名稱不同,如有疑問可以在文末查看詳細(xì)的代碼樣例。

第一步:構(gòu)建一個(gè)基礎(chǔ)的Spring Boot應(yīng)用,在pom.xml中引入eureka的依賴、web模塊的依賴以及swagger的依賴(這里使用了我們自己構(gòu)建的starter,詳細(xì)可點(diǎn)擊查看)。主要內(nèi)容如下:


    org.springframework.boot
    spring-boot-starter-parent
    1.5.10.RELEASE
    



    
        org.springframework.cloud
        spring-cloud-starter-eureka
    

    
        org.springframework.boot
        spring-boot-starter-web
    

    
        com.spring4all
        swagger-spring-boot-starter
        1.7.0.RELEASE
    



    
        
            org.springframework.cloud
            spring-cloud-dependencies
            Dalston.SR1
            pom
            import
        
    

第二步:編寫應(yīng)用主類:

@EnableSwagger2Doc
@EnableDiscoveryClient
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

    @RestController
    class AaaController {
        @Autowired
        DiscoveryClient discoveryClient;

        @GetMapping("/service-a")
        public String dc() {
            String services = "Services: " + discoveryClient.getServices();
            System.out.println(services);
            return services;
        }
    }
}

其中,@EnableSwagger2Doc注解是我們自制Swagger Starter中提供的自定義注解,通過該注解會(huì)初始化默認(rèn)的Swagger文檔設(shè)置。下面還創(chuàng)建了一個(gè)通過Spring MVC編寫的HTTP接口,用來后續(xù)在文檔中查看使用。

第三步:設(shè)置配置文件內(nèi)容:

spring.application.name=swagger-service-a
server.port=10010

eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/

swagger.base-package=com.didispace

其中,eureka服務(wù)端的配置采用了本站的公益eureka,大家可以通過http://eureka.didispace.com/查看詳細(xì)以及使用方法。另外,swagger.base-package參數(shù)制定了要生成文檔的package,只有com.didispace包下的Controller才會(huì)被生成文檔。

注意:上面構(gòu)建了swagger-service-a服務(wù),swagger-service-b服務(wù)可以如法炮制,不再贅述。

構(gòu)建API網(wǎng)關(guān)并整合Swagger

在Spring Cloud構(gòu)建微服務(wù)架構(gòu):服務(wù)網(wǎng)關(guān)(基礎(chǔ))一文中,已經(jīng)非常詳細(xì)的介紹過使用Spring Cloud Zuul構(gòu)建網(wǎng)關(guān)的詳細(xì)步驟,這里主要介紹在基礎(chǔ)網(wǎng)關(guān)之后,如何整合Swagger來匯總這些API文檔。

第一步:在pom.xml中引入swagger的依賴,這里同樣使用了我們自制的starter,所以主要的依賴包含下面這些:


    org.springframework.cloud
    spring-cloud-starter-zuul


    org.springframework.cloud
    spring-cloud-starter-eureka


    com.spring4all
    swagger-spring-boot-starter
    1.7.0.RELEASE

第二步:在應(yīng)用主類中配置swagger,具體如下:

@EnableSwagger2Doc
@EnableZuulProxy
@SpringCloudApplication
public class Application {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

    @Component
    @Primary
    class DocumentationConfig implements SwaggerResourcesProvider {
        @Override
        public List get() {
            List resources = new ArrayList<>();
            resources.add(swaggerResource("service-a", "/swagger-service-a/v2/api-docs", "2.0"));
            resources.add(swaggerResource("service-b", "/swagger-service-b/v2/api-docs", "2.0"));
            return resources;
        }

        private SwaggerResource swaggerResource(String name, String location, String version) {
            SwaggerResource swaggerResource = new SwaggerResource();
            swaggerResource.setName(name);
            swaggerResource.setLocation(location);
            swaggerResource.setSwaggerVersion(version);
            return swaggerResource;
        }
    }
}

說明:@EnableSwagger2Doc上面說過是開啟Swagger功能的注解。這里的核心是下面對(duì)SwaggerResourcesProvider的接口實(shí)現(xiàn)部分,通過SwaggerResource添加了多個(gè)文檔來源,按上面的配置,網(wǎng)關(guān)上Swagger會(huì)通過訪問/swagger-service-a/v2/api-docsswagger-service-b/v2/api-docs來加載兩個(gè)文檔內(nèi)容,同時(shí)由于當(dāng)前應(yīng)用是Zuul構(gòu)建的API網(wǎng)關(guān),這兩個(gè)請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到swagger-service-aswagger-service-b服務(wù)上的/v2/api-docs接口獲得到Swagger的JSON文檔,從而實(shí)現(xiàn)匯總加載內(nèi)容。

測試驗(yàn)證

將上面構(gòu)建的兩個(gè)微服務(wù)以及API網(wǎng)關(guān)都啟動(dòng)起來之后,訪問網(wǎng)關(guān)的swagger頁面,比如:http://localhost:11000/swagger-ui.html,此時(shí)可以看到如下圖所示的內(nèi)容:

可以看到在分組選擇中就是當(dāng)前配置的兩個(gè)服務(wù)的選項(xiàng),選擇對(duì)應(yīng)的服務(wù)名之后就會(huì)展示該服務(wù)的API文檔內(nèi)容。

代碼示例

本文示例讀者可以通過查看下面?zhèn)}庫的中的swagger-service-aswagger-service-b、swagger-api-gateway三個(gè)項(xiàng)目:

Github

Gitee

如果您對(duì)這些感興趣,歡迎star、follow、收藏、轉(zhuǎn)發(fā)給予支持!

以下專題教程也許您會(huì)有興趣

Spring Boot基礎(chǔ)教程

Spring Cloud基礎(chǔ)教程

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69557.html

相關(guān)文章

  • Zuul聚合Swagger的坑

    摘要:下面來看下具體的整合步驟以及采坑記錄。正常情況下上面的整合步驟沒任何問題,今天有朋友在星球提問,說自己的業(yè)務(wù)服務(wù)加了,中聚合的文檔無法顯示,因?yàn)槁窂藉e(cuò)了,少了配置的。 每個(gè)服務(wù)都有自己的接口,通過Swagger來管理接口文檔。在服務(wù)較多的時(shí)候我們希望有一個(gè)統(tǒng)一的入口來進(jìn)行文檔的查看,這個(gè)時(shí)候可以在zuul中進(jìn)行文檔的聚合顯示。 下面來看下具體的整合步驟以及采坑記錄。Cloud版本:Fi...

    icyfire 評(píng)論0 收藏0
  • 兩年了,我寫了這些干貨!

    摘要:開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問題前后端分離二使用完美處理權(quán)限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來越多時(shí),大家搜索起來就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評(píng)論0 收藏0
  • 讓ERP的服務(wù)更開放! ——用微服務(wù)架構(gòu)搭建的一套基于EBS的API服務(wù)系統(tǒng)

    摘要:每個(gè)服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)與服務(wù)間采用輕量級(jí)的通信機(jī)制互相溝通通常是基于的。在微服務(wù)架構(gòu)下,故障會(huì)被隔離在單個(gè)服務(wù)中。 1. 源碼下載地址 源碼鏈接: https://github.com/samt007/xy... 這是用Spring Cloud微服務(wù)架構(gòu)搭建的一套基于EBS的API服務(wù)系統(tǒng)如對(duì)本文有任何的疑問,請(qǐng)聯(lián)系我:[email protected] 2. Introduc...

    JouyPub 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<