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

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