İstek sınırlama ve koruma sistemi
Rate Limiting ile API isteklerini kontrol altına aldık. Sunucu aşırı yüklenmeden korunuyor.
Standart API kullanımı
Yoğun kullanım için
Rate limiting kontrolü her API isteğinde şöyle çalışır:
RouteServiceProvider'da RateLimiter::for('api', fn($request) => Limit::perMinute(60)->by($request->user()?->id ?: $request->ip())) tanımlanır.
Her kullanıcı/IP için benzersiz key oluşturulur: rate_limit:api:user:123 veya rate_limit:api:ip:192.168.1.1. Bu key Redis'te saklanır.
Her istekte Redis INCR komutu ile sayaç artırılır. İlk istekte EXPIRE ile 60 saniyelik TTL ayarlanır. Sliding window algoritması kullanılır.
Sayaç değeri maxAttempts (60) ile karşılaştırılır. Aşılmamışsa istek devam eder. Aşılmışsa ThrottleRequestsException fırlatılır.
Her yanıta header'lar eklenir: X-RateLimit-Limit: 60, X-RateLimit-Remaining: 45, X-RateLimit-Reset: 1707753600 (Unix timestamp).
Limit aşılınca 429 Too Many Requests döner. Body'de {"message": "Too Many Attempts.", "retry_after": 35} ve Retry-After header'ı bekleme süresini belirtir.
Belirli sürede yapılabilecek maksimum istek sayısı.
Trafik ışığı gibi, akışı kontrol eder
Limit aşıldığında dönen HTTP hata kodu.
Kırmızı ışık gibi, dur bekle der