← Blog'a Dön
TEKNIK

API Rate Limiting Nedir? Uygulamanızı Aşırı Yükten Koruma

F. Çağrı Bilgehan3 Şubat 202610 dk okuma
rate limitingapigüvenlikperformans

API Rate Limiting Nedir? Uygulamanızı Aşırı Yükten Koruma

Bir kullanıcı saniyede binlerce istek atıyor mu? Bot trafiği sunucuyu mu çökertiyor? Rate Limiting ile API'nize gelen istek sayısını sınırlandırın, hem güvenliği hem performansı koruyun.

Rate Limiting Tanımı

Rate Limiting, belirli bir zaman diliminde bir kaynağa yapılabilecek istek sayısını sınırlama tekniğidir. Limit aşıldığında HTTP 429 (Too Many Requests) döner.

Kullanıcı A: 100 istek/dakika → ✅ İzin ver
Kullanıcı B: 5000 istek/dakika → ❌ 429 Too Many Requests

Neden Rate Limiting?

  1. DDoS koruması — Kötü niyetli trafiği engelleyin
  2. Kaynak koruması — Sunucu ve veritabanı aşırı yüklenmesini önleyin
  3. Adil kullanım — Tüm kullanıcılara eşit hizmet verin
  4. Maliyet kontrolü — Üçüncü parti API maliyetlerini sınırlayın

Rate Limiting Algoritmaları

1. Fixed Window

Sabit zaman pencerelerinde sayaç tutar:

12:00:00 - 12:01:00 → 100 istek limiti
12:01:00 - 12:02:00 → 100 istek limiti (sıfırlanır)
async function fixedWindow(userId: string, limit: number) {
  const window = Math.floor(Date.now() / 60000); // 1 dk pencere
  const key = `rate:${userId}:${window}`;
  const count = await redis.incr(key);
  if (count === 1) await redis.expire(key, 60);
  return count <= limit;
}

Sorun: Pencere sınırında 2x trafik patlaması oluşabilir.

2. Sliding Window

Kayan pencere ile daha düzgün dağılım:

async function slidingWindow(userId: string, limit: number, windowMs: number) {
  const now = Date.now();
  const key = `rate:${userId}`;
  
  // Eski istekleri temizle
  await redis.zremrangebyscore(key, 0, now - windowMs);
  
  // Mevcut sayıyı kontrol et
  const count = await redis.zcard(key);
  if (count >= limit) return false;
  
  // Yeni isteği ekle
  await redis.zadd(key, now, `${now}:${Math.random()}`);
  await redis.expire(key, Math.ceil(windowMs / 1000));
  
  return true;
}

3. Token Bucket

Sabit hızda token dolan bir kova. Her istek bir token harcar:

Token hızı: 10 token/saniye
Kova kapasitesi: 100 token

Normal trafik: 5 istek/s → Token birikir (burst kapasitesi)
Yoğun trafik: 50 istek/s → Biriken tokenlar harcanır
Aşırı trafik: 200 istek/s → Token biter → 429

4. Leaky Bucket

İstekler sabit hızda işlenir. Fazlası kuyrukta bekler veya reddedilir.

Pratik Implementasyon

Express Middleware

import rateLimit from 'express-rate-limit';

const apiLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 dakika
  max: 100, // IP başına 100 istek
  message: {
    error: 'Çok fazla istek gönderdiniz. 15 dakika sonra tekrar deneyin.'
  },
  standardHeaders: true, // RateLimit-* headers
  legacyHeaders: false,
});

app.use('/api/', apiLimiter);

Nginx Rate Limiting

http {
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

    server {
        location /api/ {
            limit_req zone=api burst=20 nodelay;
            limit_req_status 429;
        }
    }
}

Rate Limit HTTP Headers

HTTP/1.1 429 Too Many Requests
RateLimit-Limit: 100
RateLimit-Remaining: 0
RateLimit-Reset: 1708000060
Retry-After: 45

Farklı Limitler

| Katman | Limit | Örnek | |--------|-------|-------| | Global | Tüm API için | 10.000 istek/dakika | | Kullanıcı | Kullanıcı başına | 100 istek/dakika | | IP | IP başına | 50 istek/dakika | | Endpoint | Endpoint başına | /login: 5 istek/dakika | | Plan | Abonelik planına göre | Free: 100, Pro: 1000 |

Best Practices

  1. Bilgilendirici yanıtlarRetry-After header'ı ile ne zaman tekrar deneyebileceğini söyleyin
  2. Katmanlı limitler — Global + kullanıcı + endpoint bazında ayrı limitler
  3. Whitelist — Güvenilir servisleri limitleme dışında tutun
  4. Graceful degradation — Limit aşılınca önce kaliteli düşürün, sonra reddedin
  5. Monitoring — Rate limit tetiklemelerini izleyin ve alarmlar kurun
  6. Distributed rate limiting — Birden fazla sunucuda Redis ile merkezi sayaç tutun

Sonuç

Rate Limiting, API güvenliğinin ve kararlılığının temel yapı taşıdır. Doğru algoritma ve yapılandırma ile hem kötü niyetli trafiği engelleyebilir hem de tüm kullanıcılara adil hizmet verebilirsiniz.

API güvenliği ve rate limiting'i LabLudus platformunda öğrenin.

İlgili Yazılar

Acik Kaynak Yazilim Rehberi: Nedir, Nasil Katki Yapilir?

Acik kaynak yazilim nedir, lisans turleri nelerdir ve acik kaynak projelere nasil katki yapilir? GitHub, open source ve topluluk rehberi.

CI/CD Nedir? Surekli Entegrasyon ve Dagitim Rehberi

CI/CD nedir, neden onemlidir ve nasil kurulur? GitHub Actions, Jenkins ve otomatik test-deploy pipeline rehberi.