Spracovanie chýb
Chyby vyhadzujú RoundlyConsulting\GooglePlaces\Exceptions\PlacesException s typovanými metódami, podľa ktorých rozlíšite, čo zlyhalo:
use RoundlyConsulting\GooglePlaces\Exceptions\PlacesException;
use RoundlyConsulting\GooglePlaces\Facades\GooglePlaces;
try {
$predictions = GooglePlaces::autocomplete('Coffee');
} catch (PlacesException $e) {
if ($e->isRateLimited()) { /* back off */ }
elseif ($e->isDenied()) { /* check key / billing / enabled APIs */ }
elseif ($e->isInvalidRequest()) { /* fix the request */ }
elseif ($e->isUnreachable()) { /* timeout, DNS failure, refused connection */ }
report($e); // $e->googleStatus(), $e->googleReason(), $e->googleErrorMessage()
}Kľúč sa do správ nedostane
API kľúč sa nikdy neobjaví v správe výnimky, v udalosti ani v kľúči cache. Každá správa sa začierni — chybový text od Google aj správa o zlyhaní prenosu, ktorá končí URL požiadavky, kde Geocoding API nesie svoj key=. Nastavený kľúč sa všade, kde sa objaví, skryje okrem posledných štyroch znakov a rovnako aj hodnota každého parametra key=, token= či signature= v URL; hodnota s ôsmimi a menej znakmi sa skryje celá. $e->response je surová HTTP odpoveď vrátane URL požiadavky — neserializujte ju do reportov.
Kontroly stavu
Kontroly zjednocujú tvary chýb všetkých troch Google API a isUnreachable() odlíši zlyhanie siete od odpovede:
| Kontrola | Stavy Google |
|---|---|
isRateLimited() | RESOURCE_EXHAUSTED, OVER_QUERY_LIMIT — a vždy pri RateLimitExceededException |
isDenied() | PERMISSION_DENIED, UNAUTHENTICATED, REQUEST_DENIED, OVER_DAILY_LIMIT — alebo googleReason týkajúci sa kľúča či projektu, napr. API_KEY_INVALID, bez ohľadu na stav |
isInvalidRequest() | INVALID_ARGUMENT, INVALID_REQUEST — a nie je denied |
isUnreachable() | Bez stavu Google — Google nebol vôbec dostupný (timeout, zlyhanie DNS, odmietnuté spojenie) |
Detail chyby
catch (PlacesException $e) {
$e->getCode(); // HTTP status of the failed response (0 for local errors)
$e->googleStatus(); // e.g. "PERMISSION_DENIED", "OVER_QUERY_LIMIT"
$e->googleReason(); // e.g. "API_KEY_INVALID" — null for the Geocoding API
$e->googleErrorMessage(); // Google's own error message, if any
$e->isUnreachable(); // true for a timeout, DNS failure or refused connection
$e->response; // ?Illuminate\Http\Client\Response — raw, request URL included
}Kedy sa vyhadzuje
| Továrenská metóda | Kedy sa vyhodí |
|---|---|
fromResponse() | Google vrátil neúspešnú odpoveď. Nesie HTTP stav, stav Google a správu. |
connectionFailed() | Google nebol dostupný ani po nastavených opakovaniach — isUnreachable() vráti true. |
missingApiKey() | Nie je nastavený API kľúč — vyhodí sa pred akoukoľvek HTTP požiadavkou. |
tooManyPrimaryTypes() | AutocompleteQuery s viac ako 5 primárnymi typmi. |
tooManyRegionCodes() | AutocompleteQuery s viac ako 15 kódmi regiónov. |
invalidRadius() | Polomer NearbySearchQuery mimo 0–50000 m. |
sessionFinished() | Billing session použitá znova po volaní details(). |
routeNotFound() | distance() narazil na cieľ bez dostupnej trasy. |
RateLimitExceededException::for() | API s rate limitom by čakalo dlhšie ako jeho max_wait. |
Timeouty a opakovania
Každé volanie je ohraničené hodnotami http.timeout a http.connect_timeout. Zlyhania spojenia (timeout, DNS) sa opakujú http.retries-krát s pauzou http.retry_delay; chyby vrátené od Google sa nikdy neopakujú — okamžite sa prejavia ako PlacesException. Oba timeouty sú celé sekundy, aspoň 1: 0 (bez timeoutu) alebo nezmysel ako five vyhodí InvalidConfigurationException, namiesto toho, aby požiadavka zostala neohraničená.
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.