Laravel geliştiricileri, uygulamalarında sıkça karşılaştıkları bekleme süresi (cooldown) ihtiyacı için yeni bir açık kaynak paket olan Laravel Cooldown ile tanışıyor. Çoğu Laravel uygulaması, parola sıfırlama istekleri, e-posta doğrulama, OTP/SMS gönderimi, yapay zeka prompt üretimi, rapor dışa aktarma, ödeme yeniden denemeleri, ödül talep etme ve pahalı arka plan işleri gibi eylemlerde bir tür bekleme süresine ihtiyaç duyar. Ancak Laravel'in mevcut RateLimiter'ı, özellikle istek hız sınırlaması için tasarlanmıştır ve 'dakikada 60 istek' gibi senaryolar için idealdir. İşte tam bu noktada, eylem bazlı bekleme sürelerini yönetmek için daha esnek bir çözüm arayışı devreye giriyor.
Laravel Cooldown paketi, geliştiricilere bekleme sürelerini cache veya veritabanında kalıcı olarak saklama, doğrudan Eloquent modellerine bağlama, aynı API'yi controller, job, command ve middleware'lerde yeniden kullanma, kullanıcılar, API token'ları, IP adresleri gibi farklı hedefler için bekleme süreleri depolama ve uygulama kodunu değiştirmeden depolama sürücüleri arasında geçiş yapma imkanı sunuyor. Bu özellikler, paketi özellikle karmaşık ve ölçeklenebilir uygulamalar için cazip kılıyor.
Paketin API'si, neredeyse İngilizce okur gibi ifade edilebilecek kadar akıcı. Örneğin, bir kullanıcı için parola sıfırlama bekleme süresi oluşturmak: `Cooldown::for('password_reset', $user)->enforce();` ve ardından eylemi gerçekleştirmek yeterli. Bekleme süresini kontrol etmek de aynı derecede basit: `if (Cooldown::for('password_reset', $user)->active()) { $remaining = Cooldown::for('password_reset', $user)->info()->remainingSeconds(); }`. Bu sayede kod okunabilirliği artarken, geliştiriciler bekleme süresi mantığını hızlıca entegre edebiliyor.
Teknik Analiz
Tasarım kararları arasında, depolama uygulamasına sıkı sıkıya bağlı kalmamak için Laravel'in `Illuminate\Support\Manager` sınıfını kullanarak değiştirilebilir sürücüler sunması yer alıyor. Şu anda Cache ve Database sürücüleri desteklenirken, ek sürücüler Laravel'in tanıdık `extend()` metodu ile kaydedilebiliyor. Ayrıca Eloquent modelleri birinci sınıf bekleme süresi hedefi olarak destekleniyor. Manuel cache anahtarı oluşturmak yerine `$user->cooldown('email_verification')->for(300);` gibi bir kullanım mümkün. Paket, modeller, skaler değerler, IP adresleri ve diğer desteklenen hedefler için benzersiz anahtarları otomatik olarak çözümlüyor.
Öne çıkan bir diğer özellik ise middleware'in yalnızca başarılı isteklerden sonra bekleme süresini başlatması. Birçok bekleme süresi uygulaması, istek başarılı olmadan önce geri sayıma başlar ve bu da form doğrulama hatası gibi durumlarda kullanıcının gereksiz yere beklemesine neden olur. Laravel Cooldown middleware'i, yalnızca başarılı (2xx) veya yönlendirilmiş (3xx) yanıtlardan sonra bekleme süresi oluşturarak bu sorunu çözüyor. Bu sayede kullanıcı deneyimi iyileşirken, hatalı girişlerden kaynaklanan gereksiz beklemelerin önüne geçiliyor.
Uzmanların Görüşleri
Laravel Cooldown paketi, açık kaynak olarak GitHub'da yayınlandı ve topluluktan geri bildirim bekliyor. Geliştiriciler, API, mimari, dokümantasyon veya yeni sürücü/özellik fikirleri için katkıda bulunabilir. Paket, özellikle bekleme sürelerini esnek ve sürdürülebilir bir şekilde yönetmek isteyen Laravel geliştiricileri için güçlü bir araç olarak öne çıkıyor. Daha fazla bilgi ve katkı için GitHub reposu: https://github.com/zaber-dev/laravel-cooldown
Kaynak: dev.to