菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

API 网关 Ocelot

4610人阅读 2021/6/7 11:00 总访问:962319 评论:0 收藏:0 手机
分类: API

前言

API网关是系统暴露在外部的一个访问入口。就像一个公司的门卫承担着寻址、限制进入、安全检查、位置引导、等等功能。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理等等。


API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。

Ocelot是一个用.NET Core技术实现并且开源的API网关技术,它的功能包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器、Service Fabric、Skywalking等的集成。而且这些功能都只需要简单的配置即可完成。

下载依赖包(版本16.0.0)

Install-Package Ocelot -version 16.0.0

构建一个Ocelot的配置文件

  1. {
  2.   "Routes": [
  3.     {
  4.         //网关转发到下游格式
  5.       "DownstreamPathTemplate""/api/customers",
  6.       //下游方案
  7.       "DownstreamScheme""http",
  8.        //下游服务配置
  9.       "DownstreamHostAndPorts": [
  10.         {
  11.             //下游地址
  12.           "Host""localhost",
  13.           //下游端口号
  14.           "Port"9001
  15.         }
  16.       ],
  17.        //上游Api请求格式
  18.       "UpstreamPathTemplate""/customers",
  19.       //上下游支持请求方法
  20.       "UpstreamHttpMethod": [ "Get" ]
  21.     },
  22.     {
  23.       "DownstreamPathTemplate""/api/customers/{id}",
  24.       "DownstreamHostAndPorts": [
  25.         {
  26.           "Host""localhost",
  27.           "Port"9001
  28.         }
  29.       ],
  30.       "DownstreamPort"9001,
  31.       "UpstreamPathTemplate""/customers/{id}",
  32.       "UpstreamHttpMethod": [ "Get" ]
  33.     }
  34.   ],
  35.   //全局
  36.   "GlobalConfiguration": {
  37.     "RequestIdKey""OcRequestId",
  38.     //管理路径
  39.     "AdministrationPath""/administration"
  40.   }
  41. }

添加配置文件的使用

在Program文件中的 CreateHostBuilder

  1. public class Program
  2.     {
  3.         public static void Main(string[] args)
  4.         {
  5.             CreateHostBuilder(args).Build().Run();
  6.         }
  7.         public static IHostBuilder CreateHostBuilder(string[] args) =>
  8.             Host.CreateDefaultBuilder(args)
  9.                .ConfigureAppConfiguration((hostingContext, config) =>
  10.                {
  11.                    //添加配置文件的使用
  12.                    config
  13.                        .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
  14.                        .AddJsonFile("configuration.json")
  15.                        .AddEnvironmentVariables();
  16.                })
  17.                 .ConfigureWebHostDefaults(webBuilder =>
  18.                 {
  19.                     webBuilder.UseStartup<Startup>();
  20.                     //修改启动端口号
  21.                     webBuilder.UseUrls("http://*:9000");
  22.                 });
  23.     }

Startup中添加Ocelot相关的引用

添加 ocelot的服务

  1. services.AddOcelot();

添加中间件

  1. app.UseOcelot();


评价

为什么要使用webAPI而不直接使用controller

彼年豆蔻,谁许谁地老天荒。webapi能做的事情,controller都能做,为什么要使用webapi而不直接使用controller呢?这就好比...

WebAPI转json格式

创建WebApi项目时出现的xml格式,每次都去转换比较麻烦在Global设置全局输出json格式://直接xml干掉为json GlobalConfigu...

控制台应用程序托管webAPI

在没有iis的情况下,webapi是可以自托管的so,我们从写一个webapi程序开始:1、创建一个控制台应用程序,然后在控制台应用...

在WEB API中进行统一安全验证类DelegatingHandler

根据web api 官方参考文献 总结出一下代码举例:将 HTTP 响应消息的处理委托给另一处理程序(称为“内部处理程序”)的 HTT...

.net core上传图片,文件。webAPI 上传图片文件

上传图片的前台代码都完全一样,直接来贴后台的代码吧publicActionResultUploadImage(List&lt;IFormFile&gt;upfile) { ...

使用swagger创建webAPI文档描述---详解

在前后端分离开发中,作为后端如何给前端提供有效直观的接口文档呢?没错,就是使用swagger 俗称“丝袜哥”教程:一、首先...

通过PlUpload控件配合WebAPI接口完成压缩上传文件

最近一段时间都在使用PlUpload做文件上传的功能,研究过后感觉使用起来体验还是比较好的,不过网上的资料很多都记录的很简...

WebAPI传递大数据

在接口中传输图片进制流或BASE64字符串时,使用FormUrlEncodedContent处理参数时,可能会因为参数太长导致异常无效的URL:U...

AJAX调用webAPI上传图片或文件。设置token,设置Authorization Bearer

AJAX调用webapi上传图片或文件,并返回刚上传的文件名。废话不多说直接贴代码吧html相关:&lt;!DOCTYPEhtml&gt; &lt;html&...

封装调用API接口的通用方法(抱含存调用接口日志)

protectedstaticreadonlylog4net.ILog_log=log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod(...

webAPI与rpc区别

首先说rpc,rpc的定义是远程过程调用,通俗讲就是客户端通过网络远程调用服务端的方法,比如一个用java写的method。rpc是基...

.NET HttpClient和webAPI相关的东东先记录一点。传递Authorization headertoken

get请求传递Authorization header,tokenstringurl=&quot;你请求的url&quot;; stringtoken=&quot;yourtoken&quot;; Http...

WEBAPI报错:Attribute routes with the same name 'Get' must have the same template

是因为 asp.net core 中默认创建的 api controller 中的 Get(id) Action的属性都是[HttpGet(&quot;{id}&quot;, Name = &quo...

net core webAPI版本控制

webapi的版本控制好处很多,要实现其实也比较简单。在webapi中根据不同的版本创建文件夹。然后在不同的api里边添加不同的路...

net core webAPI路由

如下我们可以通过路由传递两个参数请求地址参考如下: https://localhost:5001/api/home/aojiancc2/2622最后两个可以作为参...

.net webAPI Newtonsoft.Json返回需要的字段,忽略某些字段,修改字段名,动态返回需要的字段等

有时候我们在写webapi的时候,不想把正常用的对象所有字段都返回,我们需要进行一些筛选,忽略某些字段,大概说一下几种方法...