Adaptívne obmedzovanie
Zapnete ho cez ->adaptive(): limiter potom z každej odpovede číta Retry-After a X-RateLimit-Remaining / X-RateLimit-Reset a zapíše do úložiska penalizáciu, takže ďalšia požiadavka počká presne toľko, koľko server žiadal:
use Illuminate\Support\Facades\Http;
use RoundlyConsulting\HttpClientRateLimits\Facades\RateLimits;
Http::rateLimit(RateLimits::perSecond(20)->adaptive())
->get('https://api.example.com/things');Rovnako funguje cez Http::rateLimit(), Http::withMiddleware(), Http::pool(), adaptívny pomenovaný profil aj cez handle() okolo ľubovoľného callable, ktoré vráti odpoveď:
$api = RateLimits::perSecond(20)->by('api')->adaptive();
// Wrap any callable that returns a response; its headers are read the same way.
$response = $api->handle(fn () => Http::get('https://api.example.com/things'));
// After a 429 with "Retry-After: 7", the next call through $api waits 7 seconds.
$next = $api->handle(fn () => Http::get('https://api.example.com/things'));Ako sa hlavičky vyhodnocujú
- Retry-After — počet sekúnd alebo HTTP dátum; ak je prítomná, má prednosť.
- Inak X-RateLimit-Remaining: 0 spolu s číselným X-RateLimit-Reset. Reset môže byť oneskorenie v sekundách alebo epoch časová značka; značka, ktorá už uplynula, čakanie nežiada.
- Hlavičky, ktoré spomalenie nežiadajú — remaining nad nulou, chýbajúci alebo nečíselný reset — sa ignorujú.
- Čakanie od servera sa rešpektuje najviac jeden deň: väčšia hodnota Retry-After / X-RateLimit-Reset (škodlivá alebo chybná) sa na ňom zastaví, aby nezablokovala workera ani nepretiekla.
- Penalizácia sa uloží metódou úložiska penalizeUntil() pod kľúč vlastníka každého adaptívneho okna. Na zdieľanom úložisku tak spomalia všetky procesy s týmto kľúčom naraz.
Z pomenovaného profilu
// config/http-client-rate-limits.php
'limiters' => [
'partner' => ['rate' => 20, 'per' => 'second', 'by' => 'partner', 'adaptive' => true],
],
// anywhere
Http::rateLimit('partner')->get('https://partner.example.com/feed');Adaptívne obmedzovanie dopĺňa proaktívne rozkladanie — deklarovaný limit platí ďalej a signál servera predĺži čakanie, keď si ho vyžiada.
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.