日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Blog.Core开源】网关统一集成下游服务文档

發布時間:2023/12/4 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Blog.Core开源】网关统一集成下游服务文档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般看到公眾號更新,就是大概率要開始上班了😂

上回書咱們說到了《【Blog.Core開源】快速預覽Admin界面效果》,這樣我們就可以專注于后端開發,而且也能快速的實現效果的預覽。那今天我們繼續來往下走,說一說網關相關的內容,打算做一個網關的專題,希望可以幫助下社區吧。

先說故事背景

想必很多小伙伴都已經在工作和學習中,使用過網關了,而且在ASP.NETCore中,使用較多的就是Ocelot,當然現在的市場上也有很多其他的開源組件,這里以后再說吧,先說說Ocelot,在Blog.Core項目中,很久之前我也是用的Ocelot作為網關來搭建微服務體系架構的,只不過2021年忙著工作和寫書,沒有太多的精力吧網關給搞起來,今年就慢慢優化下項目吧。

Ocelot來實現網關還是比較簡單的,只是簡單的配置下Json文件就行,然后通過Postman來進行測試,查看效果。功能上當然還有其他的服務注冊和發現,比如用Consul或者是Nacos,甚至是Azure,目前咱們還用不到。網關另一個功能就是鑒權認證和Header信息的下發,這個咱們下篇文章再說。

那剩下的就是網關接口文檔了,如果一直用Postman畢竟不是很方便,肯定是要給前端一個踏踏實實的接口文檔的,我個人比較喜歡用Swagger,其他的接口文檔雖然很多,但是不是很習慣。那就出現了今天的問題,如何在網關的Swagger文檔中,把下游的所有微服務都集中起來,通過一個文檔地址,就能看到所有的接口信息呢,直接上代碼。

01

PART

調整Ocelot.json

幾乎大家都會寫這塊,我就不過多的介紹每個節點什么意思了,只是以BlogCore子服務為例,說說如何配置,如果以后增加其他服務,這里依此類推,舉一反三。

{"Routes": [// blog-svc{"UpstreamPathTemplate": "/svc/blog/{url}","UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ],"LoadBalancerOptions": {"Type": "RoundRobin"},"DownstreamPathTemplate": "/svc/blog/{url}","DownstreamScheme": "http","DownstreamHostAndPorts": [{"Host": "localhost","Port": 9291}],"AuthenticationOptions": {"AuthenticationProviderKey": "GW"}},// blog-svc-swagger{"UpstreamPathTemplate": "/swagger/apiswg/blog-svc/swagger.json","UpstreamHttpMethod": [ "GET" ],"DownstreamPathTemplate": "/swagger/V2/swagger.json","DownstreamScheme": "http","DownstreamHostAndPorts": [{"Host": "localhost","Port": 9291}],"LoadBalancer": "RoundRobin"}],"GlobalConfiguration": {"BaseUrl": "http://localhost:9000","ServiceDiscoveryProvider": {"Host": "localhost","Port": 8500,"Type": "Consul"}} }

核心點就是把Swagger的json地址,單獨寫一個路由映射配置,這樣就可以把Swagger給引進來了,當然如果你把下游的SwaggerJson地址給手動改成和接口類似的模板,這樣寫一個就行,就不用把api和swagger單獨分開寫兩個了。

02

PART

渲染子服務接口文檔

配置好了Json文件,下面就需要引入到網關項目里,打開Blog.Core.Gateway的Startup文件,找到Swagger的中間件配置的地方,修改顯示規則:

public static void UseCustomSwaggerMildd(this IApplicationBuilder app){if (app == null) throw new ArgumentNullException(nameof(app));var apis = new List<string> { "blog-svc" };app.UseSwagger();app.UseSwaggerUI(options =>{options.SwaggerEndpoint($"/swagger/v1/swagger.json", $"Blog.Core.Gateway-v1");apis.ForEach(m =>{options.SwaggerEndpoint($"/swagger/apiswg/{m}/swagger.json", m);});options.RoutePrefix = "";});}

我這里單獨封裝了一個擴展方法,通過手動配置參數名,就可以循環添加到網關的swagger文檔里了。

似乎到這里已經完成了,其實還不行,因為咱們的BlogCore子服務的路由還是api開頭的,這樣在網關的swagger中訪問接口的話,是404的:

當然網關這里我們可以做些優化,比如說統一返回數據格式,友好提醒啥的,這個大家自己根據項目需要來處理吧。

現在要解決的就是404的問題,兩種方案:

1、直接用下游的路由來配置到ocelot.json里,這樣就能訪問了,但是這樣的話,其他同樣路徑的微服務怎么辦?

2、那就直接在子服務中修改下路徑即可。√

03

PART

下游微服務修改路由

這個就很簡單了,直接給下游增加一個路由前綴就行了,我們已經有這個功能了:

/// <summary> /// 路由變量前綴配置 /// </summary> public static class RoutePrefix {/// <summary>/// 前綴名/// 如果不需要,盡量留空,不要修改/// 除非一定要在所有的 api 前統一加上特定前綴/// </summary>public const string Name = "/svc/blog"; }

這樣就ok啦,絕大部分的接口已經增加上了路由前綴,這里為啥要說絕大部分呢,因為目前這個全局路由前綴還有點兒小問題,就是如果在接口的Action上寫的絕對路徑,還是沒有增加上路由前綴的,以后我會優化掉。

請求網關接口(9000),也能很完美的實現效果,單獨訪問子服務的swagger(9291)也可以使用:

(網關接口文檔)

(子服務接口文檔)

好啦,今天的分享暫時就到這里吧,網關如何集成下游服務接口文檔的,那在以后的文章中,我會給大家分享下,如何鑒權/認證和信息下發,如何實現網關文檔登錄訪問(目前該功能在BlogCore里),如何實現處理審計日志(目前該功能在BlogCore里),如何連接服務注冊中心等等,這是一個網關的專題,希望大家喜歡。

總結

以上是生活随笔為你收集整理的【Blog.Core开源】网关统一集成下游服务文档的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。