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

Fasáda RateLimits je jediný vstupný bod balíka na tvorbu limitov. Načíta singleton RateLimitManager z kontajnera, takže nakonfigurované úložisko a deferrer — alebo RateLimits::fake() — platia pre každý limit vrátane tých, ktoré vytvorí Http::rateLimit():

use Illuminate\Support\Facades\Http;
use RoundlyConsulting\HttpClientRateLimits\Facades\RateLimits;

// Build a limit and attach it to a request.
Http::rateLimit(RateLimits::perSecond(5)->by('acct-1'))->get('https://api.example.com/orders');

// Profiles and compound windows come from the same place.
$github = RateLimits::profile('github');
$api    = RateLimits::compound([RateLimits::perSecond(5), RateLimits::perMinute(100)]);

// Inspect or clear a budget without sending anything.
$limit = RateLimits::perMinute(30)->by('acct-1');
$limit->remaining();
$limit->reset();

Kompletné rozhranie

use RoundlyConsulting\HttpClientRateLimits\Facades\RateLimits;

RateLimits::make(Limit $limit);                  // from a Limit value object
RateLimits::perSecond(int $maxAttempts = 1);     // N requests per second
RateLimits::perMinute(int $maxAttempts = 1);     // N requests per minute
RateLimits::perHour(int $maxAttempts = 1);       // N requests per hour
RateLimits::perDay(int $maxAttempts = 1);        // N requests per day
RateLimits::profile(string $name);               // a named profile from config
RateLimits::compound(array $limits);             // several windows at once
RateLimits::usingStore(Store $store);            // a copy of the manager on this store
RateLimits::usingDeferrer(Deferrer $deferrer);   // … or with this deferrer
RateLimits::releasingJob(object $job);           // … releasing a queued job instead of sleeping
RateLimits::retryAfter(Response|RequestException $response); // ?int seconds from Retry-After
RateLimits::store();                             // the shared default store
RateLimits::deferrer();                          // the default deferrer
MetódaVraciaÚčel
make(Limit $limit)RateLimitVytvorí limit z hodnotového objektu Limit s úložiskom a deferrerom managera.
perSecond / perMinute / perHour / perDay(int $maxAttempts = 1)RateLimitN požiadaviek za okno.
profile(string $name)RateLimitPomenovaný profil z konfigurácie limiters; neznáme meno vyhodí UnknownLimiterProfileException.
compound(array $limits)RateLimitViac okien naraz; prvé je primárne, platí najprísnejšie.
usingStore(Store $store)RateLimitManagerKópia managera s týmto úložiskom; singleton zostane nedotknutý.
usingDeferrer(Deferrer $deferrer)RateLimitManagerKópia managera s týmto deferrerom.
releasingJob(object $job)RateLimitManagerKópia, ktorá namiesto čakania vráti úlohu do fronty (ReleaseDeferrer).
retryAfter(Response|RequestException $response)?intPočet sekúnd z hlavičky Retry-After (sekundy aj HTTP dátum); null, ak chýba alebo je nečitateľná.
store()StoreZdieľané úložisko, do ktorého nové limity zapisujú pokusy.
deferrer()DeferrerDeferrer, ktorým nové limity čakajú.
fake()RateLimitsFakeNahradí manager zaznamenávajúcim testovacím fake.

Čo limit dokáže

Každá továrenská metóda vráti RateLimit — Guzzle middleware, ktorý odovzdáte do Http::rateLimit() alebo Http::withMiddleware(), prípadne ním cez handle() obalíte ľubovoľné callable. Je fluentný a všetko, čo sám nedefinuje, presmeruje na podkladový Limit a potom na Limiter:

SkupinaMetódy vráteného RateLimit
Nastavenie (fluentné)by(), alongside(), maxWait(), jitter(), adaptive(), setStore(), setDeferrer()
Kontrolaremaining(), availableIn(), tooManyAttempts(), delayUntilNextRequestInMs(), getKey(), getMaxAttempts(), getTimespan(), isOverMaxAttempts(), isUnderMaxAttempts(), getStore(), getDeferrer(), getLimiter()
Vynulovaniereset()
Spusteniehandle(callable)

by() zmení kľúč všetkých okien, ktoré limit vynucuje; alongside() a compound() si odovzdané limity skopírujú, takže zmena kľúča výsledku ich nikdy neovplyvní.

Prepisy pre jedno miesto volania

Úložisko alebo deferrer prepíšete pre jedno miesto v kóde bez zásahu do globálnych predvolieb:

use RoundlyConsulting\HttpClientRateLimits\Deferrer\SleepDeferrer;
use RoundlyConsulting\HttpClientRateLimits\Facades\RateLimits;
use RoundlyConsulting\HttpClientRateLimits\Store\RedisStore;

// usingStore() / usingDeferrer() return a configured copy; the shared manager is untouched.
$limit = RateLimits::usingStore(new RedisStore('default'))
    ->usingDeferrer(new SleepDeferrer)
    ->perMinute(30);

Uprednostňujete explicitnú závislosť pred statickým volaním? Pozrite si DI a akcie — injektovaný manager má rovnaké API.

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.