Konfigurácia
Balík funguje bez akejkoľvek konfigurácie. Publikovaný config/http-client-rate-limits.php v plnom znení:
use RoundlyConsulting\HttpClientRateLimits\Deferrer\SleepDeferrer;
use RoundlyConsulting\HttpClientRateLimits\Store\InMemoryStore;
return [
// Named limiter profiles referenced by string: Http::rateLimit('github').
// Each is ['rate' => int, 'per' => second|minute|hour|day] plus optional
// 'by', 'trim', 'max_wait' (ms), 'jitter' (ms), 'adaptive' (bool).
'limiters' => [
// 'github' => ['rate' => 5, 'per' => 'second', 'by' => null],
],
// Default Store for every limit the manager builds (RateLimits::…, Http::rateLimit()).
// Must implement RoundlyConsulting\HttpClientRateLimits\Store\Store.
'store' => env('HTTP_CLIENT_RATE_LIMITS_STORE', InMemoryStore::class),
// Default Deferrer used to read "now" and to pause when a limit is hit.
// Must implement RoundlyConsulting\HttpClientRateLimits\Deferrer\Deferrer.
'deferrer' => env('HTTP_CLIENT_RATE_LIMITS_DEFERRER', SleepDeferrer::class),
// Cache store name (from config/cache.php) and key prefix used by the CacheStore.
'cache_store' => env('HTTP_CLIENT_RATE_LIMITS_CACHE_STORE'),
'cache_prefix' => env('HTTP_CLIENT_RATE_LIMITS_CACHE_PREFIX', 'http-client-rate-limits'),
// Redis connection name (from config/database.php) used when the store is the RedisStore.
'redis_connection' => env('HTTP_CLIENT_RATE_LIMITS_REDIS_CONNECTION', 'default'),
// Database connection name used when the store is the DatabaseStore (null = default).
'database_connection' => env('HTTP_CLIENT_RATE_LIMITS_DATABASE_CONNECTION'),
// Dispatch RequestDeferred / RequestAllowed / RateLimitReset events when the limiter runs.
'events_enabled' => env('HTTP_CLIENT_RATE_LIMITS_EVENTS_ENABLED', true),
];Všetky kľúče
| Kľúč | Predvolené | Env | Účel |
|---|---|---|---|
limiters | [] | — | Pomenované profily limitov, na ktoré odkazujete reťazcom. |
store | InMemoryStore::class | HTTP_CLIENT_RATE_LIMITS_STORE | Predvolené úložisko nových limitov (musí implementovať Store; nenastavené alebo prázdne = InMemoryStore). |
deferrer | SleepDeferrer::class | HTTP_CLIENT_RATE_LIMITS_DEFERRER | Predvolený deferrer nových limitov (musí implementovať Deferrer; nenastavený alebo prázdny = SleepDeferrer). |
cache_store | null | HTTP_CLIENT_RATE_LIMITS_CACHE_STORE | Cache store pre CacheStore (null, nenastavené alebo prázdne = predvolený cache store). |
cache_prefix | http-client-rate-limits | HTTP_CLIENT_RATE_LIMITS_CACHE_PREFIX | Prefix kľúčov, ktoré zapisuje CacheStore. |
redis_connection | default | HTTP_CLIENT_RATE_LIMITS_REDIS_CONNECTION | Redis spojenie, ktoré používa RedisStore. |
database_connection | null | HTTP_CLIENT_RATE_LIMITS_DATABASE_CONNECTION | Databázové spojenie, ktoré používa DatabaseStore (null, nenastavené alebo prázdne = predvolené spojenie). |
events_enabled | true | HTTP_CLIENT_RATE_LIMITS_EVENTS_ENABLED | Odosielať udalosti RequestDeferred / RequestAllowed / RateLimitReset. Prijíma true/false, 1/0, on/off, yes/no; prázdna hodnota ponechá predvolené true; čokoľvek iné vyhodí InvalidConfigurationException. |
Ak nakonfigurované úložisko alebo deferrer neimplementuje príslušný kontrakt, pri vytvorení limitu sa vyhodí typovaná výnimka InvalidStoreException / InvalidDeferrerException (obe rozširujú RateLimitException). Limit musí povoliť aspoň jednu požiadavku za okno: rate / maxAttempts pod 1 vyhodí InvalidLimitException.
Štyri nastavenia úložiska — cache_store, cache_prefix, redis_connection a database_connection — sa čítajú prísne pri načítaní príslušného úložiska: nereťazcová hodnota vyhodí InvalidConfigurationException s názvom kľúča. Prázdna hodnota znamená nenastavená: chýbajúci kľúč, null aj prázdna hodnota (KEY= u hostiteľa, prázdna alebo len z medzier) použijú predvolenú hodnotu, a to pri každom kľúči z tabuľky vyššie (prázdne events_enabled udalosti ponechá zapnuté).
Výber úložiska
Predvolené úložisko zvolíte v publikovanej konfigurácii. Napríklad limity môžete zdieľať cez cache, ktorú už prevádzkujete:
use RoundlyConsulting\HttpClientRateLimits\Store\CacheStore;
// config/http-client-rate-limits.php
'store' => CacheStore::class,
'cache_store' => 'redis', // any store from config/cache.php (null = default)
'cache_prefix' => 'http-client-rate-limits',Prostredie (env)
Nastavenia úložiska, deferrera, cache, Redisu, databázy a udalostí sa riadia cez env, takže ich môžete ladiť pre každé prostredie bez publikovania konfigurácie:
HTTP_CLIENT_RATE_LIMITS_CACHE_STORE=redis
HTTP_CLIENT_RATE_LIMITS_CACHE_PREFIX=http-client-rate-limits
HTTP_CLIENT_RATE_LIMITS_REDIS_CONNECTION=default
HTTP_CLIENT_RATE_LIMITS_DATABASE_CONNECTION=limits
HTTP_CLIENT_RATE_LIMITS_EVENTS_ENABLED=trueKontrola aktívneho nastavenia
Balík pridáva vlastnú sekciu do php artisan about — zobrazí aktívne úložisko, deferrer, počet profilov limitov a stav udalostí:
php artisan about --only=http-client-rate-limitsPrejavte 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.