Serverless API: HTTP Triggers ve API Gateway Entegrasyonu
Serverless fonksiyonlar, olay tabanlı çalışacak şekilde tasarlanmıştır. Bu olayların en yaygını HTTP isteğidir. Bir fonksiyonu doğrudan HTTP'ye açmak mümkün olsa da, üretim ortamında fonksiyonun önüne bir API Gateway yerleştirmek standarttır. API Gateway; kimlik doğrulama, rate limiting, CORS, istek doğrulama ve monitoring gibi yatay kesen endişeleri fonksiyon kodundan ayırarak, fonksiyonun yalnızca iş mantığına odaklanmasını sağlar.
1. HTTP Trigger Nedir?
HTTP trigger, bir serverless fonksiyonunun bir HTTP isteği ile tetiklenmesini sağlayan bağlayıcıdır (binding). Azure Functions'ta [HttpTrigger] attribute'ü, AWS Lambda'da ise API Gateway'den gelen APIGatewayProxyEvent nesnesi bu görevi görür .
Temel Akış:
text
Client → HTTP İsteği → API Gateway → HTTP Trigger → Fonksiyon → Yanıt → Client
Fonksiyon, gelen isteği işler ve standart bir HTTP yanıtı döner. API Gateway bu yanıtı istemciye iletir .
2. Neden API Gateway?
Bir fonksiyonu doğrudan HTTP'ye açmak yerine API Gateway kullanmanın avantajları:
| Yetenek | Açıklama |
|---|---|
| Kimlik Doğrulama | JWT, OAuth2, API Key, IAM gibi mekanizmalar gateway seviyesinde uygulanır . |
| Rate Limiting | Aşırı istekleri fonksiyona ulaşmadan engeller. |
| CORS | Tarayıcı tabanlı istemciler için CORS başlıkları merkezi olarak yönetilir. |
| İstek Doğrulama | Şema validasyonu ile hatalı istekler fonksiyona hiç ulaşmaz. |
| Monitoring | Tüm istekler gateway seviyesinde loglanır ve izlenir. |
Önemli: Fonksiyon kodu, kimlik doğrulama ve rate limiting gibi konularla kirletilmemelidir. Bu sorumluluklar gateway'e aittir .
3. Azure Functions + API Management Entegrasyonu
Azure'da HTTP trigger'lı fonksiyonlar, Azure API Management ile entegre edilerek REST API olarak sunulur. Bu entegrasyon, herhangi bir dilde yazılmış fonksiyonlar için çalışır .
Entegrasyon Adımları:
-
Azure portalında Function App'i açın.
-
Sol menüden API Management seçin.
-
Link API (API Bağla) ile HTTP trigger'lı fonksiyonları içe aktarın.
-
API Management, fonksiyonun OpenAPI tanımını otomatik olarak oluşturur .
-
OpenAPI tanımını indirerek dokümantasyon ve istemci kod üretimi için kullanabilirsiniz.
API Management'ın Sağladıkları:
-
OpenAPI tanımı ile otomatik dokümantasyon
-
Geliştirici portalı
-
Rate limiting ve kota yönetimi
-
JWT doğrulama ve subscription key yönetimi
4. AWS Lambda + API Gateway Entegrasyonu
AWS'de Lambda fonksiyonları, API Gateway üzerinden HTTP endpoint'i olarak sunulur. İki tür API Gateway modeli vardır :
| Özellik | HTTP API | REST API |
|---|---|---|
| Kullanım Alanı | Basit CRUD, webhook, mobil backend | Kurumsal, katı politika kontrolleri |
| Gecikme ve Maliyet | Daha düşük gecikme; %70'e varan maliyet avantajı | Standart gecikme ve maliyet |
| Yetkilendirme | OIDC/JWT, IAM | Lambda authorizer, Cognito, IAM |
| Gelişmiş Özellikler | Temel CORS, path mapping | İstek doğrulama, WAF, cache, API key |
Lambda Proxy Integration:
API Gateway, gelen HTTP isteğini bir APIGatewayProxyEvent JSON nesnesine dönüştürür ve Lambda'ya iletir. Lambda, statusCode, headers ve body içeren bir yanıt döner .
javascript
exports.handler = async (event) => {
const id = event.pathParameters?.id;
if (!id) {
return { statusCode: 400, body: JSON.stringify({ error: 'Missing id' }) };
}
// İş mantığı...
return { statusCode: 200, body: JSON.stringify(result) };
};
Önemli: Karmaşık VTL (Velocity Template Language) mapping şablonları yerine Lambda Proxy Integration kullanmak, header ve status code kontrolünü uygulama koduna bırakır ve yönetimi basitleştirir .
5. API Gateway'in Sağladığı Güvenlik Katmanları
A. Kimlik Doğrulama Modelleri
| Platform | Yöntem |
|---|---|
| Azure | API Management subscription key, JWT doğrulama, Azure AD entegrasyonu |
| AWS | Lambda authorizer (custom), Cognito user pool, IAM, JWT (HTTP API) |
B. Rate Limiting ve Throttling
API Gateway, stage seviyesinde veya route seviyesinde rate limit uygulayarak downstream fonksiyonları ve veritabanlarını ani trafik artışlarından korur .
C. CORS Yönetimi
Tarayıcı tabanlı istemciler için CORS başlıkları, fonksiyon kodunda manuel olarak eklenmek yerine API Gateway seviyesinde yapılandırılmalıdır .
6. En İyi Pratikler
| Pratik | Açıklama |
|---|---|
| İnce Handler'lar | Fonksiyon kodunda routing veya ağır framework'ler kullanmayın; her route için ayrı fonksiyon veya modüler router kullanın . |
| Proxy Integration Kullanın | AWS'de karmaşık mapping şablonlarından kaçının; AWS_PROXY kullanın . |
| Cold Start'ı Yönetin | Deployment paketini küçük tutun; veritabanı bağlantılarını handler dışında başlatın . |
| Rate Limiting Uygulayın | Gateway seviyesinde throttling ile downstream servisleri koruyun . |
| IaC Kullanın | AWS SAM, CDK veya Terraform ile API ve fonksiyonları kod olarak tanımlayın . |
| OpenAPI Tanımı Üretin | Azure API Management ile otomatik OpenAPI tanımı oluşturun . |
7. Ne Zaman HTTP API, Ne Zaman REST API? (AWS)
-
HTTP API: Basit mikroservisler, webhook'lar, JWT kimlik doğrulamalı mobil backend'ler. Daha hızlı ve daha ucuz .
-
REST API: AWS WAF koruması, yanıt cache'leme, istek payload şema doğrulaması gerektiğinde .
Azure'da: API Management, tüm HTTP trigger'lı fonksiyonlar için tek çatı altında yönetim sunar.
Sonuç
Serverless API'lerde HTTP trigger ve API Gateway entegrasyonu, fonksiyonların ölçeklenebilir, güvenli ve yönetilebilir bir şekilde sunulmasını sağlar. Azure API Management ve AWS API Gateway, kimlik doğrulama, rate limiting, CORS ve monitoring gibi yatay kesen endişeleri fonksiyon kodundan ayırır. Lambda Proxy Integration ve OpenAPI tanımı ile dokümantasyon, yönetimi basitleştirir. Unutmayın: Fonksiyonunuz yalnızca iş mantığına odaklanmalı; güvenlik ve trafik yönetimi gateway'in sorumluluğunda olmalıdır.