Zložené limity
Odovzdajte pole limitov a všetky sa vynútia na jednej požiadavke. Limiter sa riadi najprísnejším oknom a pri povolení volania zaznamená pokus do každého okna:
use RoundlyConsulting\HttpClientRateLimits\Facades\RateLimits;
Http::rateLimit([RateLimits::perSecond(5), RateLimits::perMinute(100)])
->get('https://api.example.com/things');
// Or fluently, alongside the primary window:
$middleware = RateLimits::perSecond(5)->alongside(RateLimits::perMinute(100));
// Or by stacking the macro:
Http::rateLimit(RateLimits::perSecond(5))->rateLimit(RateLimits::perMinute(100));
// `by:` scopes every window — here both acct-1:second and acct-1:minute.
Http::rateLimit([RateLimits::perSecond(5), RateLimits::perMinute(100)], by: 'acct-1')
->get('https://api.example.com/things');Každé okno si v úložisku vedie vlastný počet — pod kľúčom {key}:{window}, napr. global:second a global:minute (pozrite Limit::storeKey()) —, takže sa požiadavka v každom okne započíta presne raz bez ohľadu na to, ako limity kombinujete, a čistenie krátkeho okna nikdy nezmaže históriu dlhého. Limity s rovnakým kľúčom aj oknom zdieľajú jeden limit bez ohľadu na to, kde vznikli. Argument by: v makre zmení kľúč všetkých okien.
Atomicky naprieč oknami
Zložený limit (pole, compound() alebo alongside()) overí a zapíše všetky svoje okná jedným atomickým krokom úložiska. Zreťazené makrá sú dva samostatné limitery: každý je atomický na vlastných oknách, no prvý zapíše pokus skôr, než druhý rozhodne, či čakať — ak na tom záleží, uprednostnite zloženú formu. Http::rateLimit($limit, by: '...') mení kľúč kópie, takže odovzdaný RateLimit alebo Limit si zachová vlastný kľúč.
Viac okien a fasáda
use RoundlyConsulting\HttpClientRateLimits\Facades\RateLimits;
// alongside() also takes a list of Limit / RateLimit entries:
$middleware = RateLimits::perSecond(5)->by('api')->alongside([
RateLimits::perMinute(100)->by('api'),
RateLimits::perDay(5_000)->by('api'),
]);
// Or build it through the facade:
$middleware = RateLimits::compound([
RateLimits::perSecond(5)->by('api'),
RateLimits::perMinute(100)->by('api'),
]);maxWait() alebo jitter() nastavené na ktoromkoľvek okne zloženého limitu platia pre celé čakanie — vyhráva najprísnejší strop a najširší rozptyl — bez ohľadu na to, ktoré okno je práve úzkym hrdlom. Kontrolné metódy (remaining(), availableIn(), tooManyAttempts()) vracajú stav primárneho okna (vrátane prípadnej adaptívnej penalizácie); reset() vynuluje všetky okná limitu.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.