Çoğu Laravel uygulaması, zamanla bir tür cooldown fonksiyonuna ihtiyaç duyar.
Bu, istek sınırlaması değil, gerçek eylem cooldown’larıdır.
Örnekler:
- Şifre sıfırlama talepleri
- Email doğrulama
- OTP / SMS gönderimi
- AI prompt üretimi
- Rapor dışa aktarımları
- Ödeme denemeleri
- Ödül talepleri
- Çok maliyetli arka plan işleri
Laravel, mükemmel bir RateLimiter sağlar, ancak bu öncelikle istek sınırlaması için tasarlanmıştır (örneğin, “dakikada 60 istek”).
Bir uygulama geliştirirken, kendimi biraz farklı bir şeye ihtiyaç duyar buldum:
- Cooldown’ları cache veya veritabanında kalıcı hale getirmek
- Cooldown’ları doğrudan Eloquent modellerine eklemek
- Aynı API’yi denetleyiciler, işler, komutlar ve middleware arasında yeniden kullanmak
- Kullanıcılar, API tokenları, IP adresleri veya özel tanımlayıcılar gibi keyfî hedefler için cooldown’ları saklamak
- Uygulama kodunu değiştirmeden depolama sürücülerini değiştirmek
Bu yüzden Laravel Cooldown paketini geliştirdim.
Hedef
Hedef
Hedef, neredeyse İngilizce gibi okunabilir bir API istiyordum.
Cooldown::for('password_reset', $user)->enforce();
// İşlemi yerine getir...
Cooldown::for('password_reset', $user)->for(300);
Bir cooldown kontrolü yapmak da oldukça basit:
if (Cooldown::for('password_reset', $user)->active()) {
$remaining = Cooldown::for('password_reset', $user)
->info()
->remainingSeconds();
}
Bazı Tasarım Kararları
Bazı Tasarım Kararları
Her şeyi tek bir depolama uygulamasına bağlamak yerine, paket, değiştirilebilir sürücüler sağlamak için Laravel’in Illuminate\Support\Manager sınıfını kullanır.
Şu anda desteklenen sürücüler:
Ek sürücüler, Laravel’in tanıdık extend() deseni kullanılarak kaydedilebilir.
Bir diğer tasarım kararı, Eloquent modellerinin birinci sınıf cooldown hedefleri olarak desteklenmesidir.
Özel cache anahtarları oluşturmak yerine, basitçe yazabilirsiniz:
$user->cooldown('email_verification')->for(300);
Paket, modeller, scalar değerler, IP adresleri ve diğer desteklenen hedefler için otomatik olarak benzersiz anahtarlar çözümler.
Sadece Başarılı Olan Middleware
Sadece Başarılı Olan Middleware
Beni rahatsız eden bir durum, pek çok cooldown uygulamasının, istek aslında başarılı olmadan geri sayımı başlatmasıdır.
Geçerli bir form göndermeyi hayal edin.
Bir e-posta adresinizi yanlış yazdığınız için başka bir dakika beklemek zorunda kalmamalısınız.
Laravel Cooldown’daki middleware, yalnızca başarılı (2xx) veya yönlendirilmiş (3xx) yanıtlar sonrasında cooldown yaratır.
Özellikler
Özellikler
- Cache ve Veritabanı sürücüleri
- İfadeli akıcı API
- Yerel Eloquent entegrasyonu
- Route middleware
- Immutable DTO’lar
- Olay dağıtımı
- Otomatik veritabanı temizleme
- Özel sürücü desteği
Geri Bildirimler Bekleniyor
Geri Bildirimler Bekleniyor
Bu, açık kaynaklı bir projedir ve Laravel topluluğundan geri bildirim almayı çok isterim.
API, mimari veya dokümantasyon hakkında önerileriniz ya da ek sürücüler veya özellikler için fikirleriniz varsa, duymak isterim.
Kaynak: Orijinal Makale


