.Net Core Microservice Api Gateway
Bu makalemizde .net core microservice mimari yapısında api gateway’i üstlenen Ocelot kütüphanesini bir örnek ile inceleyeceğiz.
Kısaca microservice’den bahsetmek gerekirse. Temel amacı modüller birbirinden bağımsız olarak çalışan. Servis geliştirmesi ve dağıtımı farklı platformlarda yapılabilen. Uygulamanızı geliştirirken işe aldığınız yeni geliştirici kolay adapte olmasını sağlayan. Takım üyelerinin birbirinden bağımsız kod geliştirebilsini sağlayan v.s. gibi olanaklara imkan sağlamaktır.
Kulağa hoş gelen, bu kadar güzel şeyin tabiki bir maliyeti olacaktır. Bu makalemizde bu maliyetlerin en önemlisi api gateway’den bahsedeceğiz.
Api Gateway uygulamamıza gelen requestleri ilgili microservice’lere route etmektedir. (Farklı amaçlarından bahsedeceğiz.) Ocelot kütüphanesi de tam olarak bu noktada ihtiyacımızı fazlasıyla karşılıyor. Diğer özelliklerine bakacak olursak.
- Authorization
- Caching
- Logging
- Configuration
- Rate Limiting
Bu alanlarda da ihtiyacımızı karşılamaktadır. Daha fazlası için aşağıdaki dökümanı inceleyebilirsiniz.
Bir örnekle routing işlemini nasıl gerçekleştiririz hep beraber bakalım.
Öncelikle aşağıdaki klasör yapısını oluşturuyorum.
-microservice
--ProductApi
--CustomerApi
--ApiGateway
Toplam 3 tane .net core web api uygulaması oluşturalım. (ProductApi, CustomerApi, ApiGateway)
// Her bir klasörün içinde çalıştıralım.
dotnet new webapi
Product api uygulamamızın içinde controller’a örnek bir kaç data ekleyelim.
Uygulama 7002 portu üzerinden ayağa kalkması için Program.cs dosyasında aşağıdaki düzenlemeyi yapıyorum.
Aynı güncellemeleri Customer Api projemizde de yapalım.
Customer Api uygulamamızı 7001 portu üzerinde host ediyoruz.
Evet örnek projelerimizi oluşturduk şimdi sıra geldi api gateway tarafın. Bunun içinde .net core webapi uygulaması kullanacağız. Bu uygulamamıza nuget package manager üzerinden aşağıdaki kütüphaneyi yüklüyoruz.
Install-Package Ocelot
Yükleme bittikten sonra aşağıdaki komutu çalıştıralım.
dotnet restore
Api Gateway projemizin içine ocelot.json dosyası oluşturarak config’leri yazalım.
GlobalConfiguration kısmında api gateway uygulamamızı host ettiğimiz url ve portu tanımlıyoruz. (Aynı zamanda uygulamamızın program.cs dosyası içindeki port ayarınıda yapmayı unutmayalım.) Burada önemli kısım ReRoutes dizisi içinde tanımladığımız her bir eleman bir servisi ifade ediyor.
DownstreamPathTemplate alanında ilgili api uygulamasının url dizinini tanımlıyoruz. UpstreamPathTemplate ‘de ise kullanıcının hangi path’i yazdığında bu api url’ine yönlendirilmesi gerektiğini belirtiyoruz.
Api Gateway projemizin program.cs dosyasında yazdığımız ocelot.json dosyasını startup da kullanmak üzere set edelim.
Startup.cs dosyasında yazdığımız config’leri set edelim.
Yine startup.cs içinde bulunan Configure methodu içine app.UseOcelot() tanımlaması yaparak uygulama çalıştığında ayağa kalkmasını sağlayalım.
Evet uygulama configlerini tamamladık şimdi testlerimize başlayalım. Yazdığımız bu üç uygulamayı ayrı ayrı ayağa kaldıralım.
dotnet run
- 7000 portu üzerinde APiGateway
- 7001 portu üzerinde CustomerApi
- 7002 portu üzerinde ProductApi
3 uygulamamız belirtilen portlarda çalışacaktır. Örnek request’lerimizi yapalım.
http://localhost:7000/product-service/product
http://localhost:7000/customer-service/customer
Fark ettiyseniz tüm isteklerimi localhost:7000 adresine yapıyorum arka tarafta çalışan api gateway ilgili microservice yönlendirmeyi yapıyor ve gelen response’u bize dönüyor.
Repo:
Yararlı olması dileğiyle…
Hoşçakalın.