Limity požiadaviek (rate limiting)
Každé odchádzajúce volanie prechádza cez http-client-rate-limits-for-laravel, s vlastným limitom pre každé API pod kľúčom google-places:{surface}:{owner}. Požiadavky predvolene čakajú, kým sa okno uvoľní; so zapnutým adaptive (predvolene) sa limiter sám doladí podľa Retry-After z odpovede 429. Každé API má predvolene limit 600 požiadaviek za minútu.
| API (surface) | Volania | Kľúč hosta |
|---|---|---|
places | autocomplete, details, textSearch, nearbySearch, findPlace, textSearchPaginated, nearbySearchPaginated, photoUri, photoContents (photo()) | hosts.places |
routes | distance, computeMatrix, matrix() | hosts.routes |
geocoding | geocode, geocodeAddress | hosts.geocoding |
Každé API doladíte v config/google-places.php (pozrite Konfigurácia) alebo cez env:
GOOGLE_PLACES_GEOCODING_RATELIMIT=300
GOOGLE_PLACES_GEOCODING_RATELIMIT_PER=minute
GOOGLE_PLACES_ROUTES_RATELIMIT_ENABLED=false # send this surface unthrottled
GOOGLE_PLACES_PLACES_RATELIMIT_MAX_WAIT=2000 # fail fast (ms) instead of pacingrate_limits.owner je spoločný pre všetky API, takže viacero aplikácií zdieľajúcich jeden kľúč Google môže mať každá vlastný limit. photoUrl() (bez požiadavky) a check() sa nikdy neobmedzujú. Každý kľúč sa číta pod plným názvom, takže preklep v per alebo nezmyselný limit vyhodí InvalidConfigurationException s názvom kľúča, napríklad google-places.rate_limits.places.limit — nikdy sa potichu nepoužije okno minute.
Rýchle zlyhanie
Ak má API nastavené rýchle zlyhanie (max_wait) a čakanie by ho prekročilo, volanie vyhodí RateLimitExceededException — ide o PlacesException, takže existujúce bloky catch (PlacesException) fungujú ďalej — s vlastnosťou $e->surface a cez kontrakt HasRetryAfter z package toolkitu aj s $e->retryAfterSeconds():
use RoundlyConsulting\PackageToolkit\Contracts\HasRetryAfter;
try {
GooglePlaces::textSearch('coffee');
} catch (PlacesException $e) {
if ($e instanceof HasRetryAfter) {
return response('Slow down', 429, ['Retry-After' => $e->retryAfterSeconds()]);
}
throw $e;
}use RoundlyConsulting\GooglePlaces\Exceptions\RateLimitExceededException;
catch (RateLimitExceededException $e) {
$e->surface; // "places", "routes" or "geocoding"
$e->retryAfterSeconds(); // seconds until the window frees up
$e->getCode(); // 429
}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.