Ocelot er et api gateway der er lavet til .NET projekter bygget på en microservice arkitektur, der har brug for et samlet indgangspunkt. Ocelot tilbyder mange features der er nemme at implementere og bruge.

Har du brug for et api gateway? Nej, det er ikke et krav at bruge et api gateway, da det kommer med nogle få drawbacks, som bla. du får et single point of failure og der kan være noget latency, i og med kommunikationen skal igennem flere punketer end bare ud til en enkelt service.

Der er dog mange flere fordele end udfordringer, efter min mening. En af de store fordele er at forbrugere af servicesne kun skal kende et sted af finde endpoints i stedet for at kende lange lister af forskellelige services.

Der er dog mange udbydere af gateways, som tilbyder meget af det sammen og det kan være svært at vælge den rette.

Blandt denne liste findes Ocelot, som er open source. Derudover kan valget ligge mellem Kong, Express Api Gateway og Azure Api Managment. Vi vil dog focusere på Ocelot

Opret ocelot api gateway

Start med at lave et api project. Tilføj en fil ocelot.json. Derefter mangler vi at fortælle projectet om denne vil. Dette gøres i program klassen

 public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((host, config) => {
                    config.AddJsonFile("ocelot.json");
                })
            .UseStartup<Startup>();

Når dette er klaret skal vi tilføje Ocelot servicen og middleware som bliver gjort i Startup I ConfigureServices tilføjer vi

services.AddOcelot(Configuration);

Og tilføj ocelot middleware i confiqure

await app.UseOcelot();

Til sidste mangler ocelot confiqurationen. Inde i filen ocelot.json du har lavet skal vi tilføje en url som ocelot skal lytte på og et sted den skal sende de requests hen . Dette gøres ved at lave et GlobalConfiguration object som har en BaseUrl, i mit tilfælde er dette https://localhost:44386. altså :

"GlobalConfiguration": {
    "BaseUrl": "https://localhost:44386"
  }

Herefter skal vi tilføje et reroute array som fortæller ocelot hvor request skal sendes hen.

"ReRoutes": [
    {
      {
      "DownstreamPathTemplate": "/api/requests/{catchAll}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 44363
        }
      ],
      "UpstreamPathTemplate": "/requests/{catchAll}"

    }
}],

Her angiver vi i “UpstreamPathTemplate”: hvad ocelot skal lytte på, “DownstreamHostAndPorts”: angiver hvor dette request skal sendes hen og “DownstreamPathTemplate”: angiver enpointet ocelot skal vidre sende.