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

Open source

HTTP Client Rate Limits for Laravel

Inštalácia
composer require roundly-consulting/http-client-rate-limits-for-laravel
Vyžaduje: PHP ^8.4 · Laravel ^12.0|^13.0

Prehľad

Obmedzte odchádzajúce požiadavky, ktoré posiela HTTP klient Laravelu. Nastavíte limit — za sekundu, minútu, hodinu alebo deň — a malý Guzzle middleware rozloží volania v čase: pri dosiahnutí limitu počká presne toľko, koľko je potrebné, takže kvótu externého API nikdy neprekročíte. Každý limit vzniká cez jednu fasádu RateLimits, takže nakonfigurované úložisko — alebo testovací fake — platí všade. Pomenované profily, zložené okná, samostatné limity pre vlastníkov, adaptívne spomalenie podľa hlavičiek odpovede a zdieľané úložisko v cache, Redise či databáze sú súčasťou balíka. Licencia MIT a minimum závislostí: len oficiálne komponenty Laravelu a dva malé balíky Roundly.

Čo získate

Obmedzenie na jeden riadok

Http::rateLimit(30) na akejkoľvek požiadavke alebo limity z fasády RateLimits či injektovaného managera. Počká presne toľko, koľko treba, a potom odošle.

Profily a zložené okná

Limity definujete raz v konfigurácii a odkazujete na ne menom. Vynútite 5/s aj 100/min naraz — platí najprísnejšie okno.

Zdieľané úložiská

V pamäti, v ľubovoľnej cache Laravelu, v Redise alebo v databáze — každé overí a zapíše požiadavku jedným atomickým krokom, takže workery so spoločným limitom ho nikdy neprekročia.

Adaptívne spomalenie

Číta hlavičky Retry-After a X-RateLimit-* z odpovede, takže ďalšie volanie počká presne toľko, koľko server požaduje.

Rýchle zlyhanie, jitter a fronty

Obmedzte čakanie typovanou výnimkou, rozložte prebúdzanie jitterom alebo vráťte úlohu do fronty namiesto blokovania workera.

Udalosti a testovací fake

Udalosti RequestDeferred, RequestAllowed a RateLimitReset a zaznamenávajúci RateLimits::fake() s aserciami odložených, povolených aj vynulovaných limitov.

Dokumentácia

Inštalácia

Inštalácia cez Composer, voliteľné publikovanie konfigurácie a migrácia len pri použití DatabaseStore.

Konfigurácia

Každý konfiguračný kľúč, jeho predvolená hodnota a env premenná — profily, úložisko, deferrer, cache, Redis, databáza a udalosti.

Fasáda RateLimits

Jediný vstupný bod na tvorbu limitov — továrenské metódy pre okná, profily, zložené limity, prepisy úložiska a deferrera, Retry-After, fake.

DI a akcie

Namiesto fasády injektujte RateLimitManager alebo si RateLimit poskladajte ručne — balík nemá žiadne triedy akcií.

Obmedzenie požiadaviek

Obmedzte volania HTTP klienta Laravelu makrom Http::rateLimit() alebo Guzzle middlewarom RateLimit — od sekundy po deň.

Samostatné limity pre vlastníkov

Priraďte limit vlastníkovi — účtu, tenantovi, API kľúču či odchádzajúcej IP — aby nezávislí volajúci nezdieľali jeden limit.

Pomenované profily limitov

Definujte opakovane použiteľné limity raz v konfigurácii a odkazujte na ne menom — Http::rateLimit('github') — so všetkými voľbami.

Zložené limity

Vynúťte na jednej požiadavke viac okien — 5 za sekundu a 100 za minútu — o čakaní rozhoduje najprísnejšie okno.

Maximálne čakanie

Obmedzte, ako dlho môže volanie čakať; nad stropom vyhodí RateLimitExceededException namiesto blokovania.

Rozptyl čakania (jitter)

Pridajte k čakaniu náhodný čas navyše, aby sa workery neprebúdzali naraz — nikdy menej než skutočné čakanie; náhodnosť nahradíte v testoch.

Adaptívne obmedzovanie

Rešpektujte limit samotného servera — čítajte hlavičky Retry-After a X-RateLimit-* a spomaľte presne podľa požiadavky.

Retry-After a opakovanie pri 429

Spojte limiter s retry() od Laravelu a RateLimits::retryAfter(), aby ste rešpektovali odpovede 429 Too Many Requests.

Kontrola pred odoslaním

Zistite, koľko požiadaviek zostáva a o koľko bude ďalšia povolená — bez zaznamenania pokusu — a vynulujte limit kľúča.

Úložiská

Kde sa uchovávajú časové značky požiadaviek — v pamäti, v cache Laravelu, v Redise či v databáze —, ako ostávajú atomické a ako napísať vlastné.

Deferrery a úlohy vo fronte

Ako prebieha čakanie — predvolene uspanie na milisekundy, alebo vrátenie úlohy späť do fronty.

Predvolené hodnoty a prepisy

Predvolené úložisko a deferrer nastavte v konfigurácii, pre jedno miesto ich prepíšte cez RateLimits::usingStore() / usingDeferrer() alebo na inštancii.

Udalosti

Udalosti RequestDeferred, RequestAllowed a RateLimitReset na logovanie, grafy či upozornenia — alebo ich vypnite pre nulovú réžiu.

Výnimky

Každá typovaná výnimka balíka, kedy nastane, a jedna základná trieda na zachytenie všetkých.

Enum Timespan

Enum Timespan za každým oknom — od sekundy po deň — s kompletnou sadou enums-for-laravel pre popisy, možnosti a validáciu.

Testovanie

Nahraďte manager cez RateLimits::fake() a overujte odložené, povolené aj vynulované limity bez čakania a Redisu, alebo použite fake Sleep.

Požiadavky

PHP 8.4+ a Laravel 12 alebo 13; Redis len pre RedisStore, dve databázové tabuľky len pre DatabaseStore.

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.