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

2021-12-29 程序猿DD

收錄於話題 #Spring Cloud 92個

有很多讀者問過這樣的一個問題:

雖然使用Swagger可以為Spring MVC編寫的接口生成了API文檔,但是在微服務化之後,這些API文檔都離散在各個微服務中,是否有辦法將這些接口都整合到一個文檔中?

之前給大家的回覆都只是簡單的說了個思路,昨天正好又有人問起,索性就舉個例子寫成博文供大家參考吧。

如果你還不了解 SpringCloudZuul和 Swagger,建議優先閱讀下面兩篇,有一個初步的了解:

1、準備工作

上面說了問題的場景是在微服務化之後,所以我們需要先構建兩個簡單的基於Spring Cloud的微服務,命名為 swagger-service-a和 swagger-service-b。

下面只詳細描述一個服務的構建內容,另外一個只是名稱不同,如有疑問可以在文末查看詳細的代碼樣例。

<parent>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-parent</artifactId>

   <version>1.5.10.RELEASE</version>

   <relativePath/>

</parent>

<dependencies>

   <dependency>

       <groupId>org.springframework.cloud</groupId>

       <artifactId>spring-cloud-starter-eureka</artifactId>

   </dependency>

   <dependency>

       <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-web</artifactId>

   </dependency>

   <dependency>

       <groupId>com.spring4all</groupId>

       <artifactId>swagger-spring-boot-starter</artifactId>

       <version>1.7.0.RELEASE</version>

   </dependency>

</dependencies>

<dependencyManagement>

   <dependencies>

       <dependency>

           <groupId>org.springframework.cloud</groupId>

           <artifactId>spring-cloud-dependencies</artifactId>

           <version>Dalston.SR1</version>

           <type>pom</type>

           <scope>import</scope>

       </dependency>

   </dependencies>

</dependencyManagement>

@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中提供的自定義註解,通過該註解會初始化默認的Swagger文檔設置。下面還創建了一個通過Spring MVC編寫的HTTP接口,用來後續在文檔中查看使用。

spring.application.name=swagger-service-a

server.port=10010

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

swagger.base-package=com.didispace

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

注意:上面構建了swagger-service-a服務,swagger-service-b服務可以如法炮製,不再贅述。

2、構建API網關並整合Swagger

Spring Cloud構建微服務架構:服務網關(基礎)一文中,已經非常詳細的介紹過使用Spring Cloud Zuul構建網關的詳細步驟,這裡主要介紹在基礎網關之後,如何整合Swagger來匯總這些API文檔。

<dependency>

   <groupId>org.springframework.cloud</groupId>

   <artifactId>spring-cloud-starter-zuul</artifactId>

</dependency>

<dependency>

   <groupId>org.springframework.cloud</groupId>

   <artifactId>spring-cloud-starter-eureka</artifactId>

</dependency>

<dependency>

   <groupId>com.spring4all</groupId>

   <artifactId>swagger-spring-boot-starter</artifactId>

   <version>1.7.0.RELEASE</version>

</dependency>

@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<SwaggerResource> 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功能的註解。這裡的核心是下面對 SwaggerResourcesProvider的接口實現部分,通過 SwaggerResource添加了多個文檔來源,按上面的配置,網關上Swagger會通過訪問 /swagger-service-a/v2/api-docs和 swagger-service-b/v2/api-docs來加載兩個文檔內容,同時由於當前應用是Zuul構建的API網關,這兩個請求會被轉發到 swagger-service-a和 swagger-service-b服務上的 /v2/api-docs接口獲得到Swagger的JSON文檔,從而實現匯總加載內容。

3、測試驗證

將上面構建的兩個微服務以及API網關都啟動起來之後,訪問網關的swagger頁面,比如: http://localhost:11000/swagger-ui.html,此時可以看到如下圖所示的內容:

可以看到在分組選擇中就是當前配置的兩個服務的選項,選擇對應的服務名之後就會展示該服務的API文檔內容。

5、代碼示例

本文示例讀者可以通過查看下面倉庫的中的 swagger-service-a、 swagger-service-b、 swagger-api-gateway三個項目:

Github:

https://github.com/dyc87112/SpringCloud-Learning/tree/master/2-Dalston%E7%89%88%E6%95%99%E7%A8%8B%E7%A4%BA%E4%BE%8B/

Gitee:

https://gitee.com/didispace/SpringCloud-Learning/tree/master/2-Dalston%E7%89%88%E6%95%99%E7%A8%8B%E7%A4%BA%E4%BE%8B

除了本文的方法之外,我還開發了一個開源項目,您也可以直接來使用,歡迎Star支持:https://github.com/dyc87112/swagger-butler

最後再給大家推薦一個《零基礎學Python》的視頻課程。

Python這門編程,我是非常推薦大家要去掌握的,由於該課程屬於基礎類課程,所以一些非計算機專業的朋友也可以去嘗試學習和應用。因為它比起Java來說它更容易上手,通過一些基礎知識內容就可以幫助減輕一些日常工作繁瑣的事情,讓你能夠事半功倍。加上現在爬蟲、AI等框架的發展,如果你有足夠的積極性和想像空間,可以玩的內容會越來越多,所以我把這個專欄推薦給你,希望你可以喜歡並有所收穫!


……

……

可關注我的公眾號

深入交流、更多福利

掃碼加入我的知識星球


點擊「閱讀原文」,看本號其他精彩內容

相關焦點

  • Spring Cloud 中 Zuul 網關到底有何牛逼之處?竟然這麼多人在用!
    會在Eureka註冊中心中註冊當前服務。並發現其他的服務。 * Zuul需要的必要依賴是spring-cloud-starter-zuul。可以說,在spring cloud中,zuul和Hystrix是無縫結合的。1、Zuul中的服務降級處理在Edgware版本之前,Zuul提供了接口ZuulFallbackProvider用於實現fallback處理。從Edgware版本開始,Zuul提供了ZuulFallbackProvider的子接口FallbackProvider來提供fallback處理。
  • 接口文檔從Swagger升級成knife4j使用教程
    Swagger應該是大部分Java程式設計師都有聽說過或者使用過,不過呢,我覺得Swagger的界面使用起來有太好用,聲明僅代表我的個人觀點。Knife4j是一個為Swagger接口文檔賦能的工具,提供了我認為更加良好的操作體驗。截止2020-11-02,版本已經升級到Knife4j 2.0.7了。
  • Swagger在Spring Rest API中的使用
    前端開發人員將需要所有其餘的api端點以及每個端點的請求方法,請求參數,請求正文和響應格式。你將如何分享有關您的api的所有信息?手動記錄所有api是非常困難和耗時的。此外,如果您手動記錄api,則每次在api中進行一些更改時都必須更改文檔。好!如果我告訴你,你可以使用一個名為Swagger的神奇工具自動化所有這些東西怎麼辦?
  • SpringBoot 優雅整合Swagger Api 自動生成文檔
    前言一個好的可持續交付的項目,項目說明,和接口文檔是必不可少的,swagger api 就可以幫我們很容易自動生成api 文檔,不需要單獨額外的去寫,無侵入式,方便快捷大大減少前後端的溝通方便查找和測試接口提高團隊的開發效率方便新人了解項目,剩餘的時間就可以去約妹子啦整合swagger api
  • Spring Doc 生成OPEN API 3文檔
    Maven 依賴要整合springdoc-openapi 和 Swagger UI , 唯一要做的就是添加springdoc-openapi-ui依賴到項目pom.xml文件中。swagger-ui4. springdoc-openapi 與Spring WebFlux集成我們可以在Spring WebFlux 項目中通過添加依賴:springdoc-openapi-webflux-ui與spri
  • 使用 swagger 為 Gin 項目生成接口文檔
    swagger介紹Swagger本質上是一種用於描述使用JSON表示的RESTful API的接口描述語言。Swagger與一組開源軟體工具一起使用,以設計、構建、記錄和使用RESTful Web服務。Swagger包括自動文檔,代碼生成和測試用例生成。
  • Spring5中函數式web開發中的swagger 文檔
    但是Spring推薦使用函數式方式;而且聽說在所有場景也推薦使用WebFlux,後續有可能廢棄掉非響應式MVC對於通過Controller來實現的接口,swagger可以直接掃描處理。使用了RouterFunction的怎麼辦呢?這篇文章我們來看一下如果通過springdoc這個項目來實現函數式接口的文檔生成。pom依賴假設你使用的是maven。
  • Go 工程化 - 使用 Google API 構建接口文檔
    ,其中包含了如何使用和集成 API 的說明,OpenAPI 文檔中,包含了集成 OpenAPI 所需的完整信息,如請求參數,返回參數等。在實際的項目開發過程中,對於程式設計師來說,OpenAPI 文檔是再熟悉不過的東西,大多數開發團隊中,只要涉及到前後端交互,OpenAPI 文檔就會作為溝通前後端開發的橋梁,所以需要一個簡單,高效,便捷的 OpenAPI 文檔生成工具。
  • 阿里巴巴SpringCloud開源教程、文檔合集,趕緊收藏
    Spring Cloud Alibaba教程Spring Cloud Alibaba教程:使用Nacos作為服務註冊發現組件Spring Cloud Alibaba教程:使用Nacos作為配置中心Spring Cloud Alibaba教程:Sentinel的使用Greenwich版本Spring Cloud Consul 之Greenwich版本全攻略spring
  • Spring Boot集成Swagger實例(maven版)
    它是一組圍繞OpenAPI規範構建的開源工具,它提供了在線文檔的查閱、測試等功能。且可實現設計、構建、記錄和使用REST API。1.2、常用註解•@Api:修飾整個類,描述Controller的作。•@ApiOperation:描述一個類的一個方法,或者說一個接口。•@ApiParam:單個參數描述。•@ApiModel:用對象來接收參數。
  • knife4j-admin v1.0發布,任意聚合 Swagger 文檔
    group=1.8.X版本接口",            "swaggerVersion": "2.0"       }        //more..,作為Spring Cloud Gateway網關組件的轉發依據5、groups集合中,所提供的Swagger接口必須保證可以訪問,完整的訪問路徑是uri+url解決痛點1、多語言使用Swagger時,集成Knife4j較麻煩雖然Knife4j
  • Spring Boot Swagger2自動生成接口文檔和Mock模擬數據
    2.1 添加依賴配置pom.xml,添加如下代碼:其中:springfox-swagger2 用於JSON API文檔的生成;springfox-swagger-ui更多版本請訪問:springfox-swagger2:http://mvnrepository.com/arti...springfox-swagger-ui:http://mvnrepository.com/arti...
  • SwaggerSpringBootStarter 2.1.1 版本更新發布
    對於spring boot的web項目,可以添加這個依賴方便地進行swagger的api 接口展示,不需要對代碼進行任何修改,只需要添加依賴即可,甚至配置文件的配置也是可選的,可以添加到開發的包的構建配置中,那樣就不會對正式包產生任何影響。
  • 基於Swagger解決增量接口文檔維護及自動測試打通
    此時前端和測試同學想必都是一臉懵逼,後端開發這是又改了哪幾個接口啊?都改了啥呀?直接去接口文檔上看,啥也看不出來,還是只有去一個個的找後端開發確認,效率低下不說還很容易遺漏。2、大家在做接口自動化的時候,需要不斷的去接口文檔中一個個的複製 api 和對應請求參數,還得不斷切換到接口文檔對應頁面查看參數定義,重複工作量極大,效率極低。
  • springcloud實踐二:gateway網關詳解
    spring cloud gateway下面介紹下Spring Cloud Gateway的實際使用。過濾器一:PrefixPath可以看到我們請求http://localhost:8091/get/a,並沒有轉發到下遊的/get/a接口,而是請求到了/user-api/get/a接口。
  • Spring Cloud 5分鐘搭建教程
    目前已在我司使用.,並成功實踐後的經驗總結,希望能幫助你更快地理解和使用Spring Cloud. 3.3.Feign:一個可以把遠程服務提供方的 rest 接口變成本地方法調用的Spring Cloud組件舉個慄子:現在有2個服務,service0, service1service0提供了一個test接口,那麼這時候,如果service1需要的調用service0,除了通過網關(zuul)調用,還可以使用Feign,來把service0
  • 重磅:Swagger3.0官方starter誕生了,其它的都可以扔了~
    Swagger 是一套基於 OpenAPI 規範(OpenAPI Specification,OAS)構建的開源工具,可以幫助我們設計、構建、記錄以及使用 Rest API。OAS本身是一個API規範,它用於描述一整套API接口,包括一個接口是哪種請求方式、哪些參數、哪些header等,都會被包括在這個文件中。
  • 一款超好用的 API 文檔生成框架,國產開源,Star 4.8K+
    和 在線調試文檔說明:根據Swagger的規範說明,詳細列出接口文檔的說明,包括接口地址、類型、請求示例、請求參數、響應示例、響應參數、響應碼等信息,使用swagger-bootstrap-ui能根據該文檔說明,對該接口的使用情況一目了然。
  • Golang使用swaggo自動生成Restful API文檔
    最新的請關注官網文檔。本文最後,優化部分可以了解一下。#使用使用#安裝swag-cli-及下載相關包安裝swag cli 及下載相關包要使用swaggo,首先需要安裝swag cli。後者為基礎路徑,像我這裡就是「/api/v1」。在原文檔中還有securityDefinitions.basic,securityDefinitions.apikey等,這些都是用來做認證的,我這裡暫不展開。
  • Dubbo 版 Swagger 來啦!Dubbo-Api-Docs 發布
    Dubbo-Admin 中有接口測試功能,但是缺少接口描述的文檔,所以該測試功能比較適合接口開發人員用於測試接口。而其他人想要使用該功能就必須先通過接口開發者編寫的文檔或者其他方式,了解清楚接口信息才能使用該功能測試接口。Dubbo 這邊有沒有集合文檔展示和測試功能,可以不用寫文檔就能把接口直接給調用方,類似 Swagger/Springfox 的工具呢?