Modern uygulamalar, özellikle mikroservis mimarisi benimseyenler, birçok bağımsız servisten oluşur. Bu servislerin her biri farklı portlarda, farklı protokollerle çalışabilir ve doğrudan erişime açık olduklarında güvenlik, versiyonlama ve yük dengeleme gibi sorunlara yol açabilir. Bu gibi karmaşaları çözmek, sistemin ölçeklenebilirliğini artırmak ve merkezi bir kontrol noktası sağlamak için API Gateway çözümleri kullanılır.
API Gateway Nedir?
API Gateway, istemciler (client) ile arka uç sistemleri (backend services) arasında bir proxy olarak görev yapan bir servis katmanıdır. Gelen istekleri uygun servis(ler)e yönlendirir, yanıtları toplayıp istemciye döner ve genellikle yük dengeleme, kimlik doğrulama, hız sınırlama (rate limiting), önbellekleme gibi ek özellikler de sunar.
Geleneksel olarak, istemci doğrudan birçok servisle iletişim kurarken, API Gateway bu ihtiyacı ortadan kaldırarak tüm dış bağlantıları üzeriden kendisi yönetir. Böylece istemciler sadece tek bir uç noktaya istek gönderir ve gerisini gateway'in yönettiği bir yapı elde edilir.
API Gateway Ne İşe Yarar?
- Güvenlik: Kimlik doğrulama (authentication) ve yetkilendirme (authorization) işlemleri gateway seviyesinde yapılabilir.
- Hız Sınırlama ve Trafik Kontrolü: Rate limiting, circuit breaker ve retry mekanizmaları gateway seviyesinde uygulanabilir.
- Servis Keşfi ve Yönlendirme: API Gateway, servisleri dinamik olarak keşfedebilir ve routing yapabilir.
- Yanıt Bileşimi (Response Aggregation): Birden fazla servise yapılan çağrılar birleştirilip tek bir yanıt oluşturulabilir.
- Versiyonlama: Versiyon kontrolü yapılan API'lerin yönlendirmesi gateway üzerinden kolayca yönetilebilir.
- Loglama ve İzleme: Merkezi log toplama ve metrik üretme için gateway'ler kullanıcı davranışlarını kayıt altına alabilir.
Yaygın API Gateway Çözümleri
Piyasada birçok açık kaynak ve ticarî API Gateway çözümü mevcuttur. Bu yazıda, iki popüler araç olan NGINX ve Kong üzerinde duracağız.
NGINX ile API Gateway
NGINX, HTTP sunucusu olarak bilinse de, güçlü ters proxy (reverse proxy) ve yük dengeleme yetenekleri sayesinde bir API Gateway olarak da kullanılabilir.
Avantajları:
- Hafif ve hızlıdır.
- Geniş dökümantasyon ve stabilite sunar.
- Rate limiting, caching, gzip, SSL sonlandırma gibi yetenekleri içerir.
- Lua ile uzatılabilir yapıdadır (OpenResty tabanlı).
Kullanım Örneği:
server { listen 80; location /users/ { proxy_pass http://user-service:3000/; } location /orders/ { proxy_pass http://order-service:4000/; } }
Bu örnekte, /users/ endpoint'i gelen istekleri user-service'e yönlendirirken, /orders/ istekleri order-service'e yönlendirilmektedir. Basit bir yönlendirme yapılandırması dahi API Gateway davranışını taklit edebilir.
Dezavantajları:
- UI ya da dashboard yönetimi yoktur (ek araç gereklidir).
- Servis discovery desteği yerel olarak mevcut değildir.
- Gelişmiş plugin ekosistemi sınırlıdır.
Kong API Gateway
Kong, açık kaynaklı, bulut yerel (cloud native) bir API Gateway çözümüdür ve üzerinde çalışan geniş bir plugin ekosistemiyle dikkat çeker. Go ve NGINX/OpenResty altyapılıdır.
Avantajları:
- Zengin plugin altyapısı (JWT auth, ACL, Rate Limiting, CORS, Prometheus Metrics, vb.)
- Admin API ile merkezi yönetim imkânı.
- Servis discovery, Load Balancing ve Health Check desteği.
- OpenAPI/Swagger entegrasyonu.
- Kong Manager adlı GUI panel mevcuttur (Kong Enterprise).
Kullanım Örneği (Kong Admin API)
Bir servis tanımlayıp route oluşturmak için aşağıdaki gibi bir istek gönderebilirsiniz:
curl -i -X POST http://localhost:8001/services \ --data name=example-service \ --data url='http://example.com' curl -i -X POST http://localhost:8001/routes \ --data service.name=example-service \ --data paths[]=/example
Dezavantajları:
- Sistemi kurmak ve konfigüre etmek ilk aşamada karmaşık gelebilir.
- Enterprise versiyon ayrımı açık kaynak kullanıcıları için sınırlayıcı olabilir.
NGINX vs Kong: Kıyaslama
| Özellik | NGINX | Kong |
|---|---|---|
| Performans | Çok yüksek | Yüksek |
| Plugin Ekosistemi | Sınırlı | Geniş |
| Kullanım Kolaylığı | Kolay | Orta-Zor |
| UI / Admin Panel | Yok | Var (Manager) |
| Extensibility | Lua ile | Lua/Go plugin |
| Rate Limiting | Varsayılan | Varsayılan |
| Service Discovery | Yok | Var |
| Monitoring | Dış araç | Prometheus içn hazır plugin |
API Gateway Seçiminde Dikkat Edilmesi Gerekenler
- Trafik Miktarı ve Performans Beklentisi: Yüksek trafikli sistemlerde NGINX gibi düşük seviyeli kontrol iyidir, fakat ileri düzey ihtiyaçlar varsa Kong gibi platformlar tercih edilebilir.
- Sistem Karmaşıklığı: Basit yönlendirme yeterliyse NGINX tercih edilebilir. Daha karmaşık kimlik yönetimi, istatistik toplama, gelişmiş plugin kullanımı gerekiyorsa Kong öne çıkar.
- Geliştirme Hızı ve Ekip Bilgisi: NGINX daha kolay öğrenilebilirken, Kong daha fazla fonksiyonalite sunduğu için eğri daha diktir.
- Yönetim Arayüzü: GUI ihtiyacı varsa Kong daha uygundur, NGINX için ek arayüzler kurmak gerekir.
Sonuç
API Gateway mimarisi, mikroservis yapılarını yönetilebilir ve güvenli hale getirmede kritik rol oynar. NGINX ve Kong, bu amaçla yaygın ve güçlü çözümler sunmaktadır. NGINX performans ve yapılandırma kontrolü açısından öne çıkarken, Kong, plugin özellikleri ve yönetim arayüzü ile kompleks yapılarda avantaj sağlar. Uygulamanızın ölçeği, erişimi ve geliştirici becerileri doğrultusunda doğru API Gateway’i tercih etmek, sürdürülebilir ve esnek bir altyapı kurmanın anahtarıdır.