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

Fasáda je najkratšia cesta a odporúčaná voľba, nie však jediná. Rovnaké API ponúka RoundlyConsulting\HttpClientRateLimits\RateLimitManager — koreň fasády registrovaný ako singleton —, ktorý si môžete injektovať cez konštruktor: explicitná závislosť a žiadne statické volania.

Tretí vstupný bod cez akcie tu nie je: balík nemá triedy akcií, pretože limit je middleware objekt, ktorý vytvára manager, nie samostatný prípad použitia. Preto neexistuje ani tabuľka „metóda fasády → akcia“.

Injektovanie managera

use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Http;
use RoundlyConsulting\HttpClientRateLimits\RateLimitManager;

final class OrdersClient
{
    public function __construct(private RateLimitManager $rateLimits) {}

    public function orders(string $account): Response
    {
        return Http::withMiddleware($this->rateLimits->perSecond(5)->by($account))
            ->get('https://api.example.com/orders');
    }
}
// Every facade method exists on the injected manager:
$limit   = $this->rateLimits->profile('github');
$seconds = $this->rateLimits->retryAfter($response);
$queued  = $this->rateLimits->releasingJob($job)->perSecond(5);

RateLimits::fake() vráti RateLimitsFake — podtyp RateLimitManager — a vloží ho do kontajnera, takže fake dostane aj injektovaný manager a Http::rateLimit().

Ručne poskladaný limit

Ak potrebujete plnú kontrolu, poskladajte RateLimit sami z Limit, Store a Deferrer:

use RoundlyConsulting\HttpClientRateLimits\Deferrer\SleepDeferrer;
use RoundlyConsulting\HttpClientRateLimits\Limit;
use RoundlyConsulting\HttpClientRateLimits\Limiter;
use RoundlyConsulting\HttpClientRateLimits\RateLimit;
use RoundlyConsulting\HttpClientRateLimits\Store\RedisStore;

$rateLimit = new RateLimit(new Limiter(
    new Limit(key: 'acct-1', maxAttempts: 5, timespan: 'second'),
    new RedisStore('default'),
    new SleepDeferrer,
));

Http::withMiddleware($rateLimit)->get('https://api.example.com/things');

Ručne vytvorený limit používa presne to úložisko a deferrer, ktoré mu odovzdáte: neplatia preň nakonfigurované predvoľby ani zdieľané úložisko a nečakajúci deferrer z fake.

Interné triedy

RetryAfter je @internal — hlavičku namiesto toho spracujte cez RateLimits::retryAfter() (alebo $manager->retryAfter()).

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.