API Gateway

Berke Sayın
7 min readMay 17, 2023

--

Önceki 2 yazımda Monolitik ve Mikroservisler mimarilerini inceleyip hangi durumlarda nasıl kullanıldıklarını örneklerle açıklamıştım. Burada ise bir API Management Tool olan API Gateway yapısına değinmek istiyorum. Projemizi Mikroservisler mimarisine uygun olarak geliştirdiğimizi düşünelim. Yani birbirinden bağımsız şekilde geliştirip deploy ettiğimiz servislerimiz var. Peki bu mimari yaklaşımı uyguladığımız projemizde client’tan gelen istek ilgili servise ve oradan da doğru endpoint’e nasıl yönlendirilir? API Gateway bir reverse proxy server olarak nasıl çalışır? Bunlara ek olarak, API Gateway’in gerçekleştirdiği işlemler, sağladığı faydalar tam olarak neler?

Herkese merhaba. Bu yazımda Reverse Proxy Server ve API Gateway kavramlarından bahsedip bir API Management Tool olan API Gateway’in uygulama geliştirme sürecinde nasıl kullanıldığını açıklamaya çalışacağım. Keyifli okumalar :)

Konular:

  • Reverse Proxy Server
  • Monolitik Mimaride Client — Server — Database İlişkisi
  • API Gateway
  • Mikroservisler Mimarisinde Client ile Mikroservisler Arasında İletişim
  • Reverse Proxy Server vs API Gateway

Reverse Proxy Server

API Gateway’in çalışma mantığını kavramak, client’tan gelen bir isteğin back-end tarafında nasıl işlendiğini daha iyi anlayabilmemize yardımcı olur. Reverse Proxy Server yapısını bilmek ise API Gateway’in en temel haliyle nasıl çalıştığını daha iyi görebilmemizi sağlar. Bu nedenle ilk olarak reverse proxy server’ı aşağıdaki örnekle açıklamak istiyorum.

Reverse Proxy Server: Reverse proxy server, client ile hedef server’lar arasında duran, bir ağdaki server’ların trafiğini yöneten server’dır.

Görsel için Kaynak: https://juniortoexpert.com/tr/proxy-vekil-sunucu-nedir/

Normalde, bir client doğrudan hedef server’a bağlanır ve yanıtı alır. Ancak reverse proxy server kullanıldığı durumda işlemler şu şekilde gerçekleşir.

  • Client’tan istek atılır,
  • Client reverse proxy server’a bağlanır,
  • Reverse proxy server, client’tan gelen isteği hedef server’a iletir,
  • Hedef server’dan gelen yanıt tekrar reverse proxy server’a gönderilir,
  • Reverse proxy server yanıtı client’a iletir,
  • Kullanıcının görmek istediği data client’ta gösterilir.

Reverse proxy server sayesinde, hedef server’ın IP adresi ve diğer bilgileri client’a açıklanmadan önce proxy server’da filtreleme, izleme ve yük dengeleme (load balancing) gibi işlemler yapılabilir.

Reverse Proxy Server Özellikleri

  • URL Rewrite (Routing): Büyük uygulamalar çoğunlukla farklı server’lar üzerinde çalışır. Bu durumda client’tan gelen isteklerin işlemin yapılacağı ilgili server’a yönlendirilmesi gerekir. Reverse proxy server, routing işlemini sağlar.
  • Load Balancing: Reverse proxy server, load balancing olarak adlandırılan yük dengeleme işlemini gerçekleştirererk farklı server’lar arasında gelen istekleri dağıtabilir. Bu fonksiyon ile server’lar üzerindeki trafiği dengelerken, web uygulamasının daha yüksek bir performans sergilemesini sağlar.
  • Prevention From Attack: Reverse proxy server, gelen request’leri filtreleyerek, yalnızca belirli IP adreslerinden gelen istekleri kabul edebilir ve zararlı istekleri engelleyebilir. SQL Injection, DDoS (Distributed Denial of Service attack) veya XSS (Cross-site scripting attack) gibi web uygulama saldırılarına karşı koruma sağlar.
  • Caching: Reverse proxy server, sık kullanılan içerikleri önbelleğe alarak (caching), response time’ı (yanıt süresi) hızlandırabilir ve böylece server yükünü azaltabilir. Bu, kullanıcıların web uygulamasındaki sayfaları daha hızlı yükleyebilmesini sağlar
  • SSL (Secure Sockets Layer) Encryption: Secure Sockets Layer protokolü, internet üzerinden iletilen verilerin güvenliğini sağlamak için kullanılır. Reverse proxy server, SSL Encryption özelliği sayesinde, gelen request’leri şifreleyerek güvenli bir şekilde hedef server’a yönlendirebilir. Bu özellik uygulama içindeki kullanıcıların özel verilerinin (kredi kartı bilgileri, şifre vb.) güvenliğini sağlar.

Reverse proxy’ler buna benzer işlemler ile uygulama güvenliğini sağlayarak web siteleri performansını arttırmak ve server’lar üzerindeki trafiği yönetmek için kullanılır.

Şimdi de Monolitik mimari ile geliştirilen bir uygulama için Client — Server — Database akışını inceleyelim.

Monolitik Mimaride Client — Server — Database İlişkisi

Burada bir online alışveriş uygulaması örneği üzerinden ilerlemek istiyorum. İlk olarak uygulamayı Monolitik mimari ile geliştirdiğimizi düşünelim.

Kullanıcı ürünleri görmek ister ve client’tan server’a şu endpoint için istek atılır.

  • Ürünlerin listelendiği sayfa için = /products

Ardından server gelen isteğe göre database’e gider, oradan data’yı alır ve ilgili sayfanın ekranında kullanıcıya ürünleri gösterir. Bu durum Monolitik mimaride bu şekilde işlenir.

API Gateway

API Gateway, client’tan gelen API isteklerini alarak çeşitli kurallara göre uygun servislere ve oradan da doğru endpoint’lere yönlendiren bir reverse proxy olarak çalışır. Uygulamadaki servislerin API’larını yönetmek ve güvenliğini sağlamak için kullanılır.

API Gateway; reverse proxy olarak çalışır, ancak sadece reverse proxy olarak kullanılmakla sınırlı değildir.

Mikroservisler Mimarisinde Client ile Mikroservisler Arasında İletişim — API Gateway

Yukarıda Monolitik yapı için bir örneği incelemiştik. Şimdi de projemizi Mikroservisler mimarisi ile geliştirdiğimiz senaryoyu düşünelim. Uygulamayı bussiness logic’e göre şu şekilde servislere ayırabiliriz:

  • User
  • Product
  • Cart
  • Checkout
  • Payment
  • Seller
  • Search
  • Notification
  • Multimedia

Mikroservisler mimarisinde servisler, farklı programlama dilleri, farklı teknolojiler ve database’ler kullanılarak geliştirilebilir ve farklı server’lar üzerinde çalışabilir.

API Gateway ise bu durumda client ve backend servisleri arasında durup client’tan gelen istekleri ilgili servislere ve oradan da doğru endpoint’lere yönlendirir. Ardından servislerden gelen yanıtı client’a iletir. Bunu yaparken de API’ların güvenliğini sağlar.

Burada Product, Seller ve Multimedia servislerine client’tan gelen istekleri inceleyelim.

Resimde de gözüktüğü gibi API Gateway client ve backend servisleri arasında duruyor ve gelen request’leri hedef server’a iletiyor.

Örneğin kullanıcı ürünleri görmek istedi. Bu durumda client’tan yine şu endpoint istek atılır:

  • Ürünlerin listelendiği sayfa için = /products

Burada request ilk olarak client ile backend servisleri arasında duran API Gateway’e gelir. API Gateway, gelen isteği filtreleyerek güvenlik açıklarını önler ve kullanıcı kimlik doğrulaması (authantication), yetkilendirme (authorization), erişim kontrolü (access control) gibi işlemleri gerçekleştirir. Ardından da isteği ilgili servise yönlendirir. Buradaki örnekte client’tan gelen istek /products endpointi için olduğundan dolayı request, server:3000 üzerinden Product servise iletilir:

Bu isteklerden sonra Product servis database’e bağlanır, request’te istenilen data’yı alır ve API Gateway’e data döner. Bu data JSON formatta olabilir. En son olarak da API Gateway gelen datayı client’ta uygun formatta gözükecek şekilde client’a iletir.

Aynı şekilde kullanıcının bir ürünün resmini veya tanıtım videosunu incelemek istediğini düşünelim. Bu durumda client’tan gelen istek; /multimedia endpoint’i için olacak. Request geldikten sonraki süreç, API Gateway üzerinde bir önceki örnekte olduğu gibi aynen işlenir ve en son request, server:5000 üzerinden Multimedia servise iletilir.

Request geldikten sonra Multimedia servis resimlerin ve videoların tutulduğu database’e gider, kullanıcının istediği data’yı oradan alır ve API Gateway’e döner. Son aşamada ise yine API Gateway gelen datayı client’a iletir.

API Gateway ile client’tan gelen request’in ilgili servise ve doğru endpoint’e iletilmesi bu şekilde gerçekleşir.

Reverse Proxy Server vs API Gateway:

Reverse proxy server’ın URL Rewrite (Routing), Load Balancing, Prevention From Attack, Caching, SSL Encyrption gibi özellikleri nasıl sağladığını önceki paragraflarda açıklamıştım.

API Gateway de bu özellikleri sağlayarak reverse proxy server gibi çalışır. Bunlara ek olarak API güvenliği ve yönetimi gibi konularda farklı özelliklere ve avantajlara sahiptir. Burada da bunları inceleyelim.

Kaynak: ByteByteGo
  • Authantication — Authorization: Temel authantication ve authorizaton işlemleri reverse proxy server ile de yapılabiliyor olsa da, API Gateway bu konuda daha güvenli yaklaşım sunar. Online alışveriş uygulaması örneğimiz üzerinden gidelim. Kullanıcının bir ürünü favorilere ekleyebilmesi veya sipariş verebilmesi için oturum açması gerekir. Client’ta API key veya JWT token’a ihtiyaç duyulur. Kullanıcı login olduktan sonra (token aldıktan sonra) protected route’lara erişebilir ve sipariş verebilir. API Gateway bu durumda authantication ve authorizaton işlemlerini yönetmek için kullanılır.
  • Rate Limiting: Protecting APIs from overuse and abuse: API’larımızı olağan dışı ve kötü- saldırgan niyetli kullanımlara karşı korumamız gerekir. Bunun için authantication (kimlik doğrulama), rate limiting (istek sınırlandırma) gibi yöntemlere başvururuz. Bunu her mikroservis için ayrı ayrı oluşturmak yerine, request’in ilk geldiği nokta olan API Gateway’de çözmemiz daha kolay olur. Ayrıca rate limiting işlemini, clients ve mikroservisler arasında duran API Gateway’in halletmesi, mikroservislerin sadece kendi görevlerine odaklanmasına yardımcı olur. Süreci daha yönetilir hale getirir.
  • Logging: API Gateway, gelen request’lerin ve response’ların izlenmesini ve loglanmasını sağlar. Bu, API performansının takibi, hata ayıklama ve güvenlik için önemlidir.
  • Analytics and Monitoring for APIs: Uygulama içerisinde kullanıcıların API’ları nasıl kullandığını görmek ve istatistiksel olarak analizini yapabilmek isteriz. API Gateway, istek sayısı, başarılı ve başarısız istek sayısı, yanıt süreleri, status code’ları gibi birçok farklı ölçüm sağlar. Bu ölçümler, API’lerin performansını takip etme ve geliştirme fırsatı sunar.

Hosting large-scale APIs: Geniş ölçekli API servisi sağlayacağımız zaman API güvenliği ve yönetimi, Authantication, Authorization, Rate Limiting Analytics and Monitoring, Logging ve bunlara benzer konulara dikkat etmemiz gerekir.

--

--

No responses yet