Node Js Microservice Api Gateway

Abdulkerim Karaman
alBarakaTech Global
4 min readDec 30, 2020

Monolitik uygulamalarda çoğu zaman tüm servis uçları ve hizmetler aynı platformda barınmaktadır. Bunun yanında birbirine bağımlı bir çok katmanı da kendi bünyesinde bulundurur. Bu nedenle client’dan gelen isteklerin yönetilmesi nispeten daha sade ve kolaydır.

Microservice, Cloud ve Serverless yapıların sıkça kullanılır olması nedeniyle client üzerinden gelen isteklerin yönetilmesi de bir problem haline gelmiştir. Tabiki yazılım ekosisteminde karşımıza çıkan her bir problem, birden fazla çözümü beraberinde getirmiştir.

Kaynak: https://docs.microsoft.com/

Birden fazla servisimizin olduğu senaryolarda, client uygulamalarımızın (mobil, web, tv, watch v.s.) bu servislerin her birinin adresini bilmesi ve ona göre istekte bulunması zorlaşmaktadır.

API Gateway de tam bu noktada çözüm sağlamaktadır. Birden fazla servisimizin önünde konumlanarak, isteklerin tek bir noktadan yönetilmesine olanak sağlar.

Daha önceki yazımızda Microsoft’un Ocelot API Gateway ürününden bahsetmiştik. Okumadıysanız buradan okuyabilirsiniz.

Kaynak: https://www.express-gateway.io/

Bu yazımızda da sizlere Node Js ile yazılmış Express.js ürününden bahsetmek istiyorum. Öncelikle Express js ürünün open source ve ücretsiz bir ürün olduğunu belirtmek isterim. İlgili repo adresine buradan ulaşabilirsiniz.

Express Js’in başlıca özelliklerine göz atmak gerekirse.

  • Tüm API’leri yönetmek için tek bir yapılandırma
  • Docker üzerinde host özelliği
  • Admin panel
  • Key Authorization ile Güvenli API

Daha fazla detay için https://github.com/ExpressGateway/express-gateway adresini ziyaret edebilirsiniz.

Örnek bir uygulama ile kullanımına bir göz atalım.

Öncelikle aşağıdaki aşağıdaki komut ile express-gateway ‘i global olarak kuralım.

npm install -g express-gateway

Örnek bir proje dizini oluşturarak yeni bir uygulama oluşturalım.

mkdir MyExpress
cd MyExpress
eg gateway create

Bu komutdan sonra CLI üzerinde çıkacak alanları dolduralım.

Aşağıdaki komut ile proje dizinine erişelim

cd DemoExpress

Projemi herhangi bir IDE ile açarak configleri ayarlayalım.

Örnek bir senaryo üzerinden giderek yaptığımız örneğin daha anlaşılır olmasını sağlayalım.

Örnek olarak elimizde iki tane api projemiz olsun

1: https://jsonplaceholder.typicode.com/posts

2:http://dummy.restapiexample.com/api/v1/employees

Şimdi bu iki uygulamamızın önüne bizim yazdığımız api gatewayı nasıl konumlandırırız inceleyelim.

Projemizin ana dizininde yer alan gateway.config.yml dosyasını aşağıdaki gibi editleyelim.

Burada localhost üzerinden /posts adresine gittiğimizde aşağıdaki url’e yönlenmesini istiyoruz. Aynı zamanda aşağıdaki düzenlemeyi de ekleyelim.

Şimdi uygulama dizinine gelerek projemizi başlatalım.

npm start

Projemiz başladığına göre http://localhost:8080/posts adresinden test edebiliriz.

Evet ilk uygulamamıza api gateway üzerinden erişim sağlamış olduk. Şimdi ikinci adresimizi de ekleyebiliriz. İkinci adresimizi de ekledikten sonra kodun son hali aşağıdaki gibi olacaktır.

Evet config’lerimiz hazır şimdi ikinci adresimizi de test edebiliriz.

http://localhost:8080/employees adresine gittiğimizde ikinci servisimize ait data’ların geldiğini görebilirsiniz.

Böylece oluşturduğumuz API Gateway projesi üzerinden (localhost:8080) posts ve employees servislerimize ulaştık. Her iki uygulamamızı da tek bir uygulama gibi sunduk.

Gün sonunda client’dan gelecek istekler API Gateway üzerinden geçerek ilgili servislere route edilecek.

Express js’in bize sunduğu olanaklardan biri de Authorization desteğidir. Şimdi bir kaç adımda API mizi daha güvenli bir hale nasıl getiririz göz atalım.

Öncelikle bir tane kullanıcı oluşturalım.

eg users create

CLI üzerinden aşağıdaki bilgileri doldurduğunuzda Express js size bir kullanıcı oluşturacak.

Uygulamamızda yine gateway.config.yml dosyamızı açarak her iki uygulamamızın policies kısmına key-auth parametresini ekleyelim.

Config tarafında yapacaklarımız bu kadar. Şimdi ilgili adrese istek atalığımızda Unauthorized hatası döndüğünü göreceksiniz.

Şimdi uygulamamızın dizinine giderek aşağıdaki komut ile auth için key’imizi oluşturalım.

eg credentials create -c akaraman -t key-auth -q

Şimdi oluşan key’i de ekleyerek request atalım.

Evet isteğimiz başarıyla çalıştı.

Repo:

Bir sonraki makalemizde görüşmek dileğiyle.

--

--