Opakovania, cache a limity
Opakovania
Čítania (GET) sa pri prerušenom spojení, 429 alebo 5xx opakujú s pauzou (retry.times pokusov). 4xx sa nikdy neopakuje a zápis sa neopakuje vôbec — 5xx pri zápise už mohlo prebehnúť.
Klientske obmedzovanie rýchlosti
Každá požiadavka prechádza limiterom z http-client-rate-limits-for-laravel. Predvolene sa požiadavky rozkladajú v čase — keď je okno providera vyčerpané, volanie počká, kým sa uvoľní, namiesto toho, aby zlyhalo. So zapnutým adaptive (predvolené) limiter číta aj vlastné hlavičky Retry-After / X-RateLimit-* a čaká presne tak, ako žiada server. Ak chcete okamžité zlyhanie, nastavte max_wait:
GITHUB_RATELIMIT_MAX_WAIT=2000 # fail fast when a defer would exceed 2 s
GITHUB_RATELIMIT_JITTER=250 # spread retries by up to 250 ms
GITHUB_RATELIMIT_ENABLED=false # or turn the client-side limiter off entirelyOdloženie, ktoré by presiahlo max_wait, vyhodí RateLimitExceededException; výnimka nesie čas čakania ako nápovedu cez kontrakt HasRetryAfter z toolkitu:
use RoundlyConsulting\Git\Exceptions\RateLimitExceededException;
use RoundlyConsulting\PackageToolkit\Contracts\HasRetryAfter;
try {
Git::github()->repositories();
} catch (RateLimitExceededException $e) {
$e->retryAfterSeconds(); // the wait the limiter would have needed
}
// In your exception handler — works for any throttled Roundly package:
if ($e instanceof HasRetryAfter) {
return response('Too Many Requests', 429, ['Retry-After' => $e->retryAfterSeconds()]);
}Limiter predvolene používa pamäťový store — v rámci procesu, čo stačí pre CLI a jeden worker. Pre kvótu zdieľanú medzi workermi či servermi nasmerujte http-client-rate-limits.store na cache, Redis alebo databázový store (HTTP_CLIENT_RATE_LIMITS_STORE); git žiadny store nevynucuje.
Stav hlásený serverom
Limit, ktorý server nahlásil v poslednej odpovedi, je dostupný priamo na providerovi:
$status = Git::github()->rateLimit(); // ?RateLimitStatus { limit, remaining, used, resetAt }
$status?->remaining;
$status?->resetAt; // ?CarbonPodmienená cache a logovanie
Pri zapnutom cache.enabled sa ETagy ukladajú, posielajú späť cez If-None-Match a odpovede 304 sa obslúžia z cache. Záznamy cache sú oddelené podľa prihlasovacích údajov, takže dva účty nikdy nezdieľajú jeden záznam. Logovanie zapisuje metódu, URL, stav a trvanie na úrovni debug, nikdy tokeny ani telá:
GIT_CACHE_ENABLED=true
GIT_CACHE_STORE=redis
GIT_CACHE_TTL=3600
GIT_LOGGING_ENABLED=true
GIT_LOGGING_CHANNEL=stackPrejavte 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.