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

Obmedzenie požiadaviek

Každé odchádzajúce volanie prechádza cez http-client-rate-limits-for-laravel, takže sa vopred držíte pod kvótami Plausible namiesto zahlcovania API a odpovedí 429. Existujú tri nezávislé rozpočty — stats (dotazy), events (príjem udalostí) a sites (weby, ciele a zdieľané odkazy) — s kľúčom plausible:{surface}:{owner}:{host}[:{site}]. Host pochádza z URL inštancie, takže Cloud a self-hosted nikdy nezdieľajú okno.

Limit Plausible — predvolene 600 požiadaviek za hodinu — platí pre API kľúč naprieč všetkými webmi, ktoré kľúč číta. Preto stats a sites predvolene používajú jeden rozpočet pre celý účet (per_site vypnuté): dashboard nad 20 webmi minie jeden rozpočet 600 za hodinu, presne ako to počíta Plausible. events je bez autentifikácie a má rozpočet pre každý web zvlášť.

Nastavenia rozpočtov

Každý rozpočet nastavíte v plausible.rate_limits.{surface}:

KľúčStatsEventsSitesÚčel
enabledtruetruetruefalse spustí bežného klienta bez limitera.
ownerappappappSpojí viac inštancií aplikácie s jedným API kľúčom do jedného okna.
limit600600060Maximum požiadaviek za okno.
perhourminutehourVeľkosť okna: second, minute, hour alebo day.
adaptivetruetruetrueRešpektovať Retry-After pri odpovedi 429 od Plausible.
max_waitnullnullnullMilisekundy. null = čakať; nastavená hodnota = hneď zlyhať s RateLimitExceeded.
jitternullnullnullMilisekundy náhodného rozptylu pridané k odkladu.
per_sitefalsetruefalseZahrnúť web do kľúča — samostatný rozpočet pre každý web. Pre stats a sites ho nechajte vypnutý, pokiaľ váš kľúč naozaj nemá kvóty pre jednotlivé weby.

Stats predvolene zodpovedá zdokumentovanému limitu Plausible 600 požiadaviek za hodinu na kľúč; Events je štedrý minútový rozpočet pre veľké objemy udalostí; Sites je nízky rozpočet na správu čerpaný z toho istého kľúča. Self-hosted inštancie môžu mať iné čísla.

Premenné prostredia

Každý kľúč má svoju premennú env. Uvedené sú názvy pre stats — pre ostatné rozpočty nahraďte STATS za EVENTS alebo SITES. Logické kľúče — enabled, adaptive a per_site — prijímajú true/false, on/off, yes/no a 1/0; čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča. Rovnako striktné sú aj ostatné: per musí byť second, minute, hour alebo day (preklep ako hourly vyhodí výnimku, nestane sa z neho hodina), limit je celé číslo najmenej 1, max_wait a jitter sú celé čísla najmenej 0 (alebo nenastavené) a owner je reťazec. Prázdna hodnota (PLAUSIBLE_STATS_RATELIMIT=) sa považuje za nenastavenú, takže platí jej predvolená hodnota:

KľúčPremenná env
enabledPLAUSIBLE_STATS_RATELIMIT_ENABLED
ownerPLAUSIBLE_RATELIMIT_OWNER (spoločná pre všetky tri)
limitPLAUSIBLE_STATS_RATELIMIT
perPLAUSIBLE_STATS_RATELIMIT_PER
adaptivePLAUSIBLE_STATS_RATELIMIT_ADAPTIVE
max_waitPLAUSIBLE_STATS_RATELIMIT_MAX_WAIT
jitterPLAUSIBLE_STATS_RATELIMIT_JITTER
per_sitePLAUSIBLE_STATS_RATELIMIT_PER_SITE
PLAUSIBLE_RATELIMIT_OWNER=app
PLAUSIBLE_STATS_RATELIMIT=600
PLAUSIBLE_STATS_RATELIMIT_PER=hour
PLAUSIBLE_STATS_RATELIMIT_MAX_WAIT=5000
PLAUSIBLE_EVENTS_RATELIMIT_PER=minute
PLAUSIBLE_SITES_RATELIMIT_ENABLED=false

# Booleans accept true/false, on/off, yes/no and 1/0; anything else throws.
# Only for a key with real per-site quotas:
PLAUSIBLE_STATS_RATELIMIT_PER_SITE=on

Čakať, alebo hneď zlyhať

Predvolene požiadavka, ktorá by prekročila okno, počká, kým sa okno uvoľní. Ak nastavíte max_wait (ms), vyhodí sa namiesto toho RoundlyConsulting\Plausible\Exceptions\RateLimitExceeded s kľúčom rozpočtu a dĺžkou čakania cez retryAfterSeconds():

use RoundlyConsulting\Plausible\Exceptions\RateLimitExceeded;

try {
    plausible()->stats()->aggregateResult($request);
} catch (RateLimitExceeded $e) {
    report("Retry {$e->key} in {$e->retryAfterSeconds()}s");
}

Keďže údaj stojí na kontrakte RoundlyConsulting\PackageToolkit\Contracts\HasRetryAfter, aplikácia vybaví akékoľvek zlyhanie pre limit — z tohto aj z iného balíka Roundly — jednou kontrolou:

use RoundlyConsulting\PackageToolkit\Contracts\HasRetryAfter;

if ($e instanceof HasRetryAfter) {
    return response('Too Many Requests', 429, ['Retry-After' => $e->retryAfterSeconds()]);
}

Opakovania a zdieľané rozpočty

  • Natívne opakovanie — všeobecná konfigurácia retry.* (opakovanie pri prechodných chybách spojenia, predvolene vypnuté) s tým nesúvisí. Spomalenie pri 429 nechajte na adaptívny limiter, aby ste nečakali dvakrát.
  • Zdieľané rozpočty — limiter predvolene používa úložisko v pamäti procesu: stačí pre jeden worker, CLI alebo plánovaný report. Pre rozpočet zdieľaný medzi workermi či servermi nasmerujte jeho úložisko na Cache, Redis alebo Database cez HTTP_CLIENT_RATE_LIMITS_STORE (pozri http-client-rate-limits-for-laravel).
  • Kvóty pre jednotlivé weby — per_site je pre stats a sites vypnuté, lebo Plausible počíta požiadavky na API kľúč; zapnite ho, len ak má váš kľúč naozaj kvóty pre jednotlivé weby.

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.