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

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.
storeInMemoryStore::classHTTP_CLIENT_RATE_LIMITS_STOREPredvolené úložisko nových limitov (musí implementovať Store; nenastavené alebo prázdne = InMemoryStore).
deferrerSleepDeferrer::classHTTP_CLIENT_RATE_LIMITS_DEFERRERPredvolený deferrer nových limitov (musí implementovať Deferrer; nenastavený alebo prázdny = SleepDeferrer).
cache_storenullHTTP_CLIENT_RATE_LIMITS_CACHE_STORECache store pre CacheStore (null, nenastavené alebo prázdne = predvolený cache store).
cache_prefixhttp-client-rate-limitsHTTP_CLIENT_RATE_LIMITS_CACHE_PREFIXPrefix kľúčov, ktoré zapisuje CacheStore.
redis_connectiondefaultHTTP_CLIENT_RATE_LIMITS_REDIS_CONNECTIONRedis spojenie, ktoré používa RedisStore.
database_connectionnullHTTP_CLIENT_RATE_LIMITS_DATABASE_CONNECTIONDatabázové spojenie, ktoré používa DatabaseStore (null, nenastavené alebo prázdne = predvolené spojenie).
events_enabledtrueHTTP_CLIENT_RATE_LIMITS_EVENTS_ENABLEDOdosielať 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=true

Kontrola 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-limits

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.