Yükleniyor

.NET Core ile Ocelot API Gateway Kurulumu ve Kullanımı

Blog Kategorileri

.Net Core Mimariler
Tasarım Desenleri
ORM Araçları
API Geliştirme
Web Geliştirme
Veritabanları
12 Mayıs 2025 Pazartesi
.NET Core ile Ocelot API Gateway Kurulumu ve Kullanımı
Merhaba,
 

Mikroservis mimarisine geçtiğimizde, sistemimiz artık birden fazla bağımsız servisten oluşur. Ancak kullanıcılar (veya frontend uygulamalar) bu servislerle tek tek uğraşmak istemez. İşte tam bu noktada devreye API Gateway girer: Kullanıcılar sadece Gateway’e istek gönderir, geri kalan yönlendirmeleri Gateway arka planda ilgili servislere dağıtır.

.NET Core dünyasında bu işi yapmak için en popüler kütüphane: Ocelot.
Bu yazıda, .NET Core uygulamalarınızda Ocelot ile API Gateway’i nasıl kurabileceğinizi ve kullanabileceğinizi adım adım anlatacağım.

Neden API Gateway Kullanılır?

  1. Routing:Tek giriş noktası, istekleri ilgili mikroservise yönlendirir.

  2. Authentication & Authorization:Kullanıcı kimlik doğrulama merkezi olarak yapılır.

  3. Load Balancing:Servisler arası yük dengeleme sağlanır.

  4. Caching & Rate Limiting:Performans ve güvenlik önlemleri uygulanır.

  5. Response Aggregation:Birden fazla servisten veri alıp tek yanıt haline getirir.


Ocelot Nedir?

Ocelot, .NET Core tabanlı açık kaynaklı bir API Gateway kütüphanesidir.
Mikroservis projelerinde reverse proxy görevi görür. Yani gelen istekleri alır, kuralına göre hedef servise yönlendirir.

Proje Kurulumu

​Ocelot NuGet Paketini Ekleyin

Ocelot Konfigürasyonu (ocelot.json)

{
  "Routes": [
    //Catalog Microservice
    {
      "DownstreamPathTemplate": "/api/{everything}",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 7070
        }
      ],
      "UpstreamPathTemplate": "/services/catalog/{everything}",
      "UpstreamHttpMethod": [ "Get", "Post", "Delete", "Put" ],
      "UpstreamScheme": "http"
    },
  ],
  "GlobalConfiguration": {
    "BaseUrl": "https://localhost:5000"
  }
}

​➡️ Routes: Ocelot’ta tüm yönlendirme kuralları bu array (dizi) içinde tanımlanır.

➡️ DownstreamPathTemplate:

Bu, istek nereye yönlendirilecek, onu gösterir.

  1. /api/{everything} demek: Gelen URL’nin son kısmı ne olursa olsun /api/ile başlayan şekilde hedef servise gönderilir.

  2. Buradaki {everything} dinamik bir parametredir, yani gelen istek ne olursa olsun alır (örneğin /services/catalog/products gelirse, hedefe /api/productsdiye yönlenir).


➡️ DownstreamScheme:

Yönlendirilecek mikroservise giderken hangi protokol kullanılacak?

  1. Burada http seçilmiş.
    (HTTPS olsaydı"https"yazılırdı.)


➡️ DownstreamHostAndPorts:

Hedef servis nerede?

  1. Burada localhost:7070olarak ayarlanmış.

  2. Yani bu istekler 7070 portunda çalışan Catalog Microservice’e yönlendirilir.

Eğer servis Docker içinde çalışıyorsa burada container adı da verilebilir, örneğin "Host": "catalog-api"gibi.


➡️ UpstreamPathTemplate:

Gateway’e dışarıdan nasıl bir URL ile istek gelecek?

  1. Burada /services/catalog/{everything}demek:
    Kullanıcı /services/catalog/...diye istek attığında bu kural devreye girer.

✅ Örneğin:

  1. Kullanıcı: GET /services/catalog/products

  2. Gateway bunu Catalog Microservice’e şu şekilde yollar: GET /api/products

Buradaki {everything}ifadesi, URL'nin sonundaki dinamik kısmı taşır. Örneğin /api/products/GetActiveProducts  endpointinde GetActiveProducts ifadesi bir "everything'' örneğidir​


➡️ UpstreamHttpMethod:

Bu kural hangi HTTP metodları için geçerli?

  1. Burada 4 temel methoda izin verilmiş:

    1. GET, POST, DELETE, PUT

✅ Yani bu route sadece bu metodlardan biriyle çağrılırsa çalışır.


➡️ UpstreamScheme:

Bu kural için gelen isteklerin hangi protokolde olacağını belirtilir.

  1. Burada "http"denmiş.

    ​HTTPS istekleri için"https"yazılabilir.


Program.cs Dosyasında Ocelot'u Aktif Edilmesi

using Ocelot.DependencyInjection;
using Ocelot.Middleware;
var builder = WebApplication.CreateBuilder(args);
IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("ocelot.json").Build();builder.Services.AddOcelot(configuration);
var app = builder.Build();
await app.UseOcelot();
app.MapGet("/", () => "Hello World!");
app.Run();

Bu kadar! Artık http://localhost:5000/products dediğinizde Ocelot, isteği ProductService servisine yönlendirir.

İleri Seviye Özellikler 

  1. Authentication:JWT token doğrulama ile mikroservis güvenliğini merkezi hale getirebilirsiniz.

  2. Rate Limiting:Kullanıcı başına saniyede belirli istek limiti koyabilirsiniz.

  3. Load Balancing:Aynı servisten birden fazla instance varsa, Ocelot aralarında yük dağıtabilir.

  4. Response Aggregation:Örneğin, /dashboardisteği ile hem /ordershem /productsservisini çağırıp, sonucu tek JSON içinde dönebilir.

 Gerçek Proje Senaryosu

Örneğin bir E-Ticaret projesi düşünelim:

  1. ProductService:Ürünleri yönetir.

  2. OrderService:Siparişleri yönetir.

  3. UserService:Kullanıcı işlemleri.

Bu durumda, tüm istekler frontend’den sadece API Gateway’egelir.
Gateway arka planda uygun servise yönlendirir, güvenlik işlemlerini yapar, hatta istenirse cache uygular.

Sonuç

API Gateway, mikroservis tabanlı sistemlerde merkezi kontrol ve routing sağlayan kritik bir yapı taşıdır.
.NET Core ile Ocelot kullanarak bu yapıyı hızlıca kurabilir, sisteminizi daha esnek ve güvenli hale getirebilirsiniz.