design

Laravel'de API Throttling: Aşırı İstekleri Kontrol Etme

April 4, 2025

"API'nizi DDoS saldırılarından nasıl korursunuz?" Laravel'in güçlü rate limiting sistemiyle API'nizi nasıl güvenceye alacağınızı öğrenelim!


1. API Throttling Nedir? 🤔

Rate Limiting, API'nize gelen istekleri sınırlandırma tekniğidir:

  • Brute Force saldırılarını önler 🔒
  • Sunucu kaynaklarını korur 🛡️
  • Adil kullanım sağlar ⚖️
// Örnek: 1 dakikada maksimum 60 istek
RateLimiter::for('api', function (Request $request) {
    return Limit::perMinute(60);
});



2. Laravel'de Temel Throttling 🛠️

Global Rate Limiting

app/Http/Kernel.php'de:

protected $middlewareGroups = [
    'api' => [
        'throttle:api',
        // ...
    ],
];


Özel Limitler Tanımlama

RateLimiter::for('downloads', function (Request $request) {
    return $request->user()
        ? Limit::perMinute(100)->by($request->user()->id)
        : Limit::perMinute(10)->by($request->ip());
});


3. Farklı Throttling Stratejileri 🧩

StratejiKullanımÖrnekIP BazlıAnonim kullanıcılarby($request->ip())Kullanıcı BazlıGiriş yapmış kullanıcılarby($request->user()->id)Endpoint ÖzelBelirli route'lar içinby('endpoint:'.$request->path())Dinamik LimitKullanıcı tipine göre$request->user()->isPremium() ? 1000 : 100


4. Advanced Throttling Teknikleri 🚀

Burst Limiting (Anlık Patlamalar)

Limit::perMinute(60)->by($key)->response(function () {
    return response('Çok fazla istek!', 429);
});


Segment Bazlı Limiting

RateLimiter::for('api', function (Request $request) {
    return [
        Limit::perMinute(1000)->by('global'),
        Limit::perMinute(100)->by($request->user()->id),
        Limit::perMinute(10)->by('endpoint:'.$request->path())
    ];
});


5. Hata Yönetimi ve Yanıtlar ⚠️

Özel Hata Sayfası:

abort(429, 'Çok fazla istek gönderdiniz. Lütfen 1 dakika bekleyin.');

J

SON Yanıtı:

response()->json([
    'message' => 'Too many attempts',
    'retry_after' => $seconds,
], 429);


6. Redis ile Yüksek Performanslı Throttling ⚡

CACHE_DRIVER=redis


// Redis özel throttling
Redis::throttle('api')
    ->allow(60)
    ->every(60)
    ->then(function () {
        // İşlem
    }, function () {
        abort(429);
    });


7. Test Senaryoları 🧪

// Testte rate limit'i bypass etme
$this->withoutMiddleware(
    ThrottleRequests::class
);

// Veya özel limitlerle test
Config::set('throttle.limits.api', '1000/minute');


Performans Karşılaştırması 📊

SenaryoThrottling YokThrottling VarKazanımBrute Force10k istek/dk60 istek/dk🛡️ 166xSunucu Yükü%100 CPU%20 CPU⚡ 5xAdil KullanımDengesizEşit dağılım⚖️

Güvenli ve Dengeli API'ler 🏆

Laravel Throttling ile:

  • Saldırılara karşı koruma 🛡️
  • Sunucu kaynaklarını koruma 💾
  • Adil kullanım sağlama ⚖️
API'nizde hangi throttling stratejilerini kullanıyorsunuz? Yorumlarda paylaşın! 💬
Bir sonraki yazımız: 🚀 [Laravel'de Soft Delete: Verileri Güvenli Silme] - Verilerinizi gerçekten silmeden "silinmiş" gibi yapın!

#Laravel #API #Security #RateLimiting #WebDevelopment 🚀

6 + 4 =