1. 程式人生 > >.net core在Ocelot閘道器中統一配置Swagger

.net core在Ocelot閘道器中統一配置Swagger

最近在做微服務的時候,由於我們是採用前後端分離來開發的,提供給前端的直接是Swagger,如果Swagger分佈在各個API中,前端檢視Swagger的時候非常不便,因此,我們試著將Swagger集中放到閘道器中。

這裡我用兩個API專案(一個BasicDataApi,一個UsersApi)和一個閘道器專案(ApiGateway)做示例,下面直接上程式碼。

首先在BasicDataApi中配置Swagger:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("BasicDataApi", new Info { Title = "基礎資料服務", Version = "v1" });
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                var xmlPath = Path.Combine(basePath, "Qka.BasicDataApi.xml");
                options.IncludeXmlComments(xmlPath);
            });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseMvc()
                 .UseSwagger(c =>
            {
                c.RouteTemplate = "{documentName}/swagger.json";
            })
                .UseSwaggerUI(options =>
            {
                options.SwaggerEndpoint("/BasicDataApi/swagger.json", "BasicDataApi");
            });
        }

在UsersApi中一樣的配置:

public void ConfigureServices(IServiceCollection services)
        {          
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("UsersApi", new Info { Title = "使用者API介面", Version = "v1" });
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;
                var xmlPath = Path.Combine(basePath, "Qka.UsersApi.xml");
                options.IncludeXmlComments(xmlPath);
            });

            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            
            app.UseMvc()
                .UseSwagger(c =>
                {
                    c.RouteTemplate = "{documentName}/swagger.json";
                })
                .UseSwaggerUI(options =>
                {
                    options.SwaggerEndpoint("/UsersApi/swagger.json", "UsersApi");
                });
        }                       

  最後在閘道器專案中修改Ocelot配置,獲取兩個專案的swagger.json不要授權:

  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/UsersApi/swagger.json",
      "DownstreamScheme": "http",
      "ServiceName": "userapi",
      "LoadBalancer": "RoundRobin",
      "UseServiceDiscovery": true,
      "UpstreamPathTemplate": "/UsersApi/swagger.json
", "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ] }, { "DownstreamPathTemplate": "/BasicDataApi/swagger.json", "DownstreamScheme": "http", "ServiceName": "basedataapi", "LoadBalancer": "RoundRobin", "UseServiceDiscovery": true, "UpstreamPathTemplate": "/BasicDataApi/swagger.json", "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ] }, { "DownstreamPathTemplate": "/UsersApi/{url}", "DownstreamScheme": "http", "ServiceName": "userapi", "LoadBalancer": "RoundRobin", "UseServiceDiscovery": true, "UpstreamPathTemplate": "/UsersApi/{url}", "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ] , "AuthenticationOptions": { "AuthenticationProviderKey": "qka_api", "AllowedScopes": [] } } ], "GlobalConfiguration": { "BaseUrl": "http://localhost:9000", "ServiceDiscoveryProvider": { "Host": "192.168.2.144", "Port": 8500 } } }

修改StartUp.cs檔案的程式碼,注意在使用中介軟體的時候,UseMvc一定要在UseOcelot之前。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddOcelot();

            var authenticationProviderKey = "qka_api";
            services.AddAuthentication("Bearer")
                .AddIdentityServerAuthentication(authenticationProviderKey, options =>
                {
                    options.Authority = "http://192.168.2.121:9066/";
                    options.RequireHttpsMetadata = false;
                    options.ApiName = "UserApi";
                });

            services.AddMvc();
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("ApiGateway", new Info { Title = "閘道器服務", Version = "v1" });
            });
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseMetricsAllMiddleware();
            app.UseMetricsAllEndpoints();

            app.UseCors("default");

            var apis = new List<string> { "BasicDataApi", "UsersApi" };
            app.UseMvc()
               .UseSwagger()
               .UseSwaggerUI(options =>
               {
                   apis.ForEach(m =>
                   {
                       options.SwaggerEndpoint($"/{m}/swagger.json", m);
                   });
               });

            app.UseOcelot().Wait();
        }

最後上圖:

相關推薦

.net core在Ocelot統一配置Swagger

最近在做微服務的時候,由於我們是採用前後端分離來開發的,提供給前端的直接是Swagger,如果Swagger分佈在各個API中,前端檢視Swagger的時候非常不便,因此,我們試著將Swagger集中放到閘道器中。 這裡我用兩個API專案(一個BasicDataApi,一個UsersApi)和一個閘道器專案(

Hystrix斷路器在微服務的應用

前文回顧 在之前的一篇文章:微服務閘道器Zuul遷移到Spring Cloud Gateway,我們講解了如何從Zuul遷移到新的元件:Spring Cloud Gateway,以及擴充套件了微服務閘道器的功能,包括限流過濾器、斷路器過濾器等。然而很多讀者在使用的時候反饋,使用POSTMAN傳送GET請求測

spring-cloud服務的Timeout設定

大家在初次使用spring-cloud的gateway的時候,肯定會被裡面各種的Timeout搞得暈頭轉向。hytrix有設定,ribbon也有。我們一開始也是亂設一桶,Github上各種專案裡也沒幾個設定正確的。對Timeout的研究源於一次log中的warning

ubuntu 15.10 設定靜態ip 分配固定ip 設定dns 設定 命令列配置ip 固定ip不生效怎麼辦

要用到的檔案: 配置介面資訊 /etc/network/interfaces 配置內容: auto eth0 iface eth0 inet static address 192.168.216.188 gateway 192.168.216.2 netmask 255.255.255.0

Hystrix斷路器在微服務的應用(Spring Cloud Gateway)

前文回顧 在之前的一篇文章:微服務閘道器Zuul遷移到Spring Cloud Gateway,我們講解了如何從Zuul遷移到新的元件:Spring Cloud Gateway,以及擴充套件了微服務閘道器的功能,包括限流過濾器、斷路器過濾器等。然而很多讀者在使用的時候反饋,使用POS

Ceph物件儲存的索引工作原理

Ceph物件儲存閘道器允許你通過Swift及S3 API訪問Ceph。他將這些API請求轉化為librados請求。Librados是一個非常出色的物件儲存(庫)但是它無法高效的列舉物件。物件儲存閘道器維護自有索引來提升列舉物件的響應效能並維護了其他的一些元資訊

SpringCloud(五)Zuul與分散式配置中心

在 Spring Cloud 微服務系統中,一種常見的負載均衡方式是,客戶端的請求首先經過負載均衡(Ngnix),再到達服務閘道器(Zuul 叢集),然後再到具體的服務。服務統一註冊到高可用的服務註冊中心叢集,服務的所有的配置檔案由配置服務管理,配置服務的配置檔案放在 GIT 倉庫,方便開發人員隨時改配置。

Bumblebee服務統一請求驗證

對於微服務閘道器來說,統一請求驗證是一個比較重要和常用的功能,通過閘道器驗證後臺服務就無須關注請求驗證;對於多語言平臺的服務而言制定驗證方式和變更驗證配置都是一件比較繁瑣和工作量大的事情。Bumblebee提供JWT驗證外掛,只需要簡單配置即可讓閘道器實現請求統一驗證。 引用外掛 Bumblebee中使用

【.NET Core專案實戰-統一認證平臺】第四章 篇-資料庫儲存配置(2)

【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 上篇文章我們介紹瞭如何擴充套件Ocelot閘道器,並實現資料庫儲存,然後測試了閘道器的路由功能,一切都是那麼順利,但是有一個問題未解決,就是如果閘道器配置資訊發生變更時如何生效?以及我使用其他資料庫儲存如何快速實現?本篇就這兩個問題展開講解,

【.NET Core專案實戰-統一認證平臺】第三章 篇-資料庫儲存配置(1)

原文: 【.NET Core專案實戰-統一認證平臺】第三章 閘道器篇-資料庫儲存配置(1) 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 本篇將介紹如何擴充套件Ocelot中介軟體實現自定義閘道器,並使用2種不同資料庫來演示Ocelot配置資訊儲存和動態更新功能,內容也是從實際設計出發

【.NET Core專案實戰-統一認證平臺】第二章篇-重構Ocelot來滿足需求

【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 這篇文章,我們將從Ocelot的中介軟體原始碼分析,目前Ocelot已經實現那些功能,還有那些功能在我們實際專案中暫時還未實現,如果我們要使用這些功能,應該如何改造等方面來說明。 一、Ocelot原始碼解讀 在使用一個元件前,最

【.NET Core專案實戰-統一認證平臺】第七章 篇-自定義客戶端限流

原文: 【.NET Core專案實戰-統一認證平臺】第七章 閘道器篇-自定義客戶端限流 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 上篇文章我介紹瞭如何在閘道器上增加自定義客戶端授權功能,從設計到編碼實現,一步一步詳細講解,相信大家也掌握了自定義中介軟體的開發技巧了,本篇我們將介紹如

【.NET Core專案實戰-統一認證平臺】第二章篇-定製Ocelot來滿足需求

原文: 【.NET Core專案實戰-統一認證平臺】第二章閘道器篇-定製Ocelot來滿足需求 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 這篇文章,我們將從Ocelot的中介軟體原始碼分析,目前Ocelot已經實現那些功能,還有那些功能在我們實際專案中暫時還未實現,如果我們要使用這

【.NET Core專案實戰-統一認證平臺】第五章 篇-自定義快取Redis

原文: 【.NET Core專案實戰-統一認證平臺】第五章 閘道器篇-自定義快取Redis 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 上篇文章我們介紹了2種閘道器配置資訊更新的方法和擴充套件Mysql儲存,本篇我們將介紹如何使用Redis來實現閘道器的所有快取功能,用到的文件及原始

【.NET Core專案實戰-統一認證平臺】第六章 篇-自定義客戶端授權

原文: 【.NET Core專案實戰-統一認證平臺】第六章 閘道器篇-自定義客戶端授權 【.NET Core專案實戰-統一認證平臺】開篇及目錄索引 上篇文章我們介紹了閘道器使用Redis進行快取,並介紹瞭如何進行快取實現,快取資訊清理介面的使用。本篇我們將介紹如何實現閘道器自定義客戶端授權,實現可以

.NET Core微服務之基於Steeltoe整合Zuul實現統一API

一、關於Spring Cloud Zuul   API Gateway(API GW / API 閘道器),顧名思義,是出現在系統邊界上的一個面向API的、序列集中式的強管控服務,這裡的邊界是企業IT系統的邊界。   Zuul 是Netflix 提供的一個開源元件,致力於在雲平臺上提供動態路由,監

.NET微服務體系結構為什麼使用Ocelot實現API

為什麼要使用API閘道器而不是直接通訊?在微服務架構中,客戶端應用程式通常需要使用

ubuntu配置伺服器

使用命令apt-get install iptables來進行iptables 的安裝。 閘道器伺服器為10.15.82.53,使用iptables配置nat等來進行閘道器伺服器的搭建。首先配置清空iptables的所有規則鏈。 iptables -F iptabl

.net core使用Bumblebee架設微服務

Bumblebee是款基於.net core開發開源的http服務閘道器,經過最近版本的完善在功能足以滿足作為微服務閘道器的需要。在微服務閘道器功能中它提供了應用服務負載,故障遷移,安全控制,監控跟蹤和日誌處理等;不僅如此它強大的外掛擴充套件功能,可以針對實業務情況進行不同的相關外掛應用開發滿足實際情況的需要

支付寶 應用和授權回撥地址怎麼配置

說明   我們在建立應用以後在應用的概覽中看到應用閘道器和授權回撥地址不知道該怎麼使用(如下圖)   名詞解釋   應用閘道器:用於接收由支付寶伺服器通知。使用介面:生活號介面和口碑門店被動通知   注意:如果您現