Ocelot Nedir? (.NET API Gateway Örneği İle)

Ezgi Gökdemir
3 min readJul 16, 2022

--

Ocelot

Merhabalar, bu yazıda Ocelot nedir, .NET’de Ocelot kütüphanesi kullanılarak bir API Gateway nasıl oluşturulur, bunlardan bahsedeceğiz.

Ölçeklenebilirlik, esneklik ve performans gibi kavramlar göz önüne alındığında çoğunlukla daha büyük fayda sağladığımız mikroservis mimarisi giderek daha popüler bir hal almıştır. Mikroservis mimarisi için özetle hem kendi başına hem bir arada çalışabilen, her biri kendine has işlevlere sahip bir servisler bütünüdür diyebiliriz.

Peki API Gateway nedir, neden ihtiyaç duyulur?

API Gateway uygulamamıza gelen istekleri mikroservislere yönlendiren bir ara katmandır. API Gateway kullanımı; kimlik doğrulama, uygulamanın güvenliği ve takibi, uygulamadaki karmaşıklığı engelleme gibi birçok avantaj sağlar.

Biz bu noktada ara bir katman için Ocelot kütüphanesinden yararlanacağız. Ocelot .NET çatısı altında bulunan bir API Gateway kütüphanesidir. HttpRequest nesnesini, bir alt servise istek yapmak için kullanılan bir HttpRequestMessage nesnesine dönüştürür ve bu şekilde iletişim sağlar. Ocelot ile aşağıdaki işlemleri yapabiliriz.

  • Authorization
  • Routing
  • Caching
  • Logging
  • Configuration
  • Rate Limiting

Biz routing yapabileceğimiz küçük bir proje geliştireceğiz. Bir User mikroservisi ve bir API Gateway oluşturup bu gateway üzerinden User servisine ulaşıp bir data almaya çalışacağız. İlgili projenin reposuna buradan ulaşabilirsiniz.

Öncelikle aşağıdaki projeleri oluşturalım.

  • APIGateway (ASP.NET Core Empty projesi)
  • UserService (ASP.NET Core Web API projesi)

User mikroservisi için gerekli konfigürasyonları yapalım. Öncelikle uygulamanın port bilgisini 5003 olarak değiştirelim. 5003 burada tamamen isteğe bağlı bir sayıdır, siz farklı bir değer verebilirsiniz. Bunun için önce Program.cs içeriğini aşağıdaki gibi düzenleyelim.

Program.cs

Daha sonra UserService uygulamasının özelliklerine giderek aşağıdaki düzenlemeyi yapalım.

UserService Properties

Bir UserController ekleyelim ve burada dummy bir data üretelim.

UserController.cs

Şimdi de APIGateway uygulamamız için gerekli düzenlemeleri yapalım. İlk olarak Startup.cs içeriğini aşağıdaki gibi düzenleyelim. Burada services.AddOcelot() ile Ocelot servislerini uygulamamıza dahil ettik. endpoints.MapControllers() ile de gelen istekleri bizim konfigüre ettiğimiz noktalara ulaştırmak istediğimizi belirttik.

Startup.cs

Şimdi de mikroservisimize erişim için API Gateway’in ihtiyaç duyacağı bilgileri içeren bir konfigürasyon dosyası oluşturalım (ocelotSettings.json).

ocelotSettings.json

Burada DownstreamPathTemplate, DownstreamScheme ve DownstreamHostAndPorts, isteğin iletileceği URL’i tanımlar. UpstreamPathTemplate, belirli bir istek için hangi DownstreamPathTemplate’nin kullanılacağını belirlemek için Ocelot’un kullanacağı URL’dir. UpstreamHttpMethod, Ocelot’un aynı URL’e yönelik farklı HTTP eylemlerine sahip istekleri ayırt edebilmesi için kullanılır.

Ve son olarak APIGateway projesinin Startup.cs dosyasını aşağıdaki gibi düzenleyelim. Burada gateway uygulamamızın ocelotSettings.json dosyasını referans alması gerektiğini belirttik.

Şimdi Postman üzerinde testlerimizi yapalım. Öncelikle iki projemizi de dosya yollarına giderek dotnet run ile çalıştıralım. APIGateway uygulamamızın launchSettings.json dosyasına gittiğimizde aşağıdaki applicationUrl bilgisini göreceğiz.

Application Url

Bu adrese bir istek atalım.

Get Users

localhost:5000/user adresine attığımız istek yaptığımız routing işlemiyle aslında localhost:5003/api/user adresine gitmiş oldu ve user datasına ulaşabildik.

Benzer şekilde id ile de istek atalım.

Get User By Id

Yine burada da localhost:5000/user/2 adresine attığımız istek yaptığımız routing işlemiyle aslında localhost:5003/api/user/2 adresine gitmiş oldu.

Elimden geldiğince detaylandırarak Ocelot kütüphanesinin kullanımından bahsetmeye çalıştım. Umarım faydalı bir içerik olmuştur. Keyifli okumalar :)

--

--

Ezgi Gökdemir
Ezgi Gökdemir

No responses yet