NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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 kryptomien

Odoslaní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.