Microservice mimarileri kullanıyorsak, bunları uygularken, monolithic  sistemlerde yaşamayacağımız bazı sıkıntılarla yüzleşmek zorundayız. Tek bir request için çeşitli servislerden veri nasıl alınır(fetch) ve toplanır(aggregate), bunlardan biridir ve API Gateway pattern, bu sorunu çözmek için ihtiyacımız olan şeydir.

Birincisi, HTTP çağrısı yoluyla bir siparişten bilgi alabileceğimiz bir Order Microservice elimizde var.

 Order microservice yalnızca siparişlerle çalışır, müşterilerle değil; bu nedenle siparişin müşteri hakkında ID den başka bir şey bilmez.

Ardından, bu müşteri hakkında tam bilgi alabileceğimiz bir Customer microservice var.

Şimdi, servislerimizin herkese açık bir API olarak gösterilmesini istiyoruz, böylece uygulamalarımız veya external olanlar onu çağırabilir.

Bir müşteri bir siparişle ilgili bilgi istediğinde, müşteri bilgilerini başka bir ek istekte bulunmaya zorlamak yerine response’a eklemek isteriz. Bu veri toplama mantığı API Gateway katmanında yapılmalıdır ve yanıt şu şekilde olacaktır:

Gördüğünüz gibi, response müşterinin tüm verilerini içerir. API isteyici, yanıtı oluşturmak için dahili olarak iki isteğin gerekli olduğunu bilmiyor; şeffaftır ve API Gateway’in ana fikri budur.

API Gateway Hakkında:

  • Yönlendirici görevi görür. microservices kümesine tek giriş noktasıdır. Bu şekilde, microservices artık halka açık olması gerekmez, ancak internal network arkasındadır ve API Gateway bir servise veya başka bir servis (Service Discovery) karşıya request’te bulunmaktan sorumludur.
  • Veri toplayıcı görevi görür: API Gateway, çeşitli servislerden veri alır ve tek bir kapsamlı yanıt döndürmek(return) için toplar. API istekcisine bağlı olarak, veri gösterimi ihtiyaçlara göre değişebilir ve burada Backend For Frontend (BFF) devreye girer.
  • Bir protokol abstraction katmanıdır: API Gateway, microservices ile iletişim kurmak için hangi protokol veya teknolojinin dahili olarak kullanıldığı fark etmeksizin bir REST API veya GraphQL olarak veya her neyse ortaya çıkabilir.
  • Hata yönetimi merkezileştirilir: Bir servis kullanılamıyorsa, çok yavaş veya benzeri bir şey oluyorsa, API Gateway cache, default responses veri sağlayabilir veya deadlock veya fatal errors yayılmasını önlemek için akıllı kararlar verebilir. Bu, devreyi kapalı tutar (Circuit Breaker) ve sistemi daha esnek ve güvenilir hale getirir.

NodeJS, Express ve RxJS kullanarak yukarıdaki örneğe dayalı bir API Gateway’in temel bir uygulamasını oluşturdum.Git hesabımdaki bu repository’den bulabilirsiniz.

Yararlı olması dileğiyle. 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir