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