Gestione degli errori
Codici di stato HTTP, formato delle risposte di errore e come gestirli in TCG Price Lookup API.
Formato delle risposte di errore
Tutti gli errori restituiscono un formato JSON coerente:
{
"error": {
"code": "error_code",
"message": "Descrizione leggibile dell'errore",
"details": {}
}
}
Codici di stato HTTP
| Codice | Descrizione |
|---|---|
200 | Successo |
400 | Richiesta non valida (parametri non validi) |
401 | Non autenticato (chiave API non valida o mancante) |
403 | Vietato (restrizioni di accesso del piano) |
404 | Non trovato (carta o risorsa inesistente) |
429 | Troppe richieste (rate limit superato) |
500 | Errore del server |
Errori comuni e come gestirli
401 Unauthorized
{ "error": { "code": "unauthorized", "message": "Invalid or missing API key" } }
Soluzione: Verifica la chiave API. Controlla che l’header X-API-Key sia impostato correttamente.
429 Too Many Requests
{ "error": { "code": "rate_limit_exceeded", "message": "Daily limit reached" } }
La risposta include l’header Retry-After con i secondi da attendere prima della prossima richiesta:
Retry-After: 3600
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1704067200
Soluzione: Rispetta l’header Retry-After. I limiti giornalieri si azzerano a mezzanotte UTC. Se hai bisogno di limiti più alti, esegui l’upgrade del piano.
403 Forbidden
{ "error": { "code": "feature_not_available", "message": "Price history requires Trader plan" } }
Soluzione: Funzionalità come storico prezzi, prezzi gradati e ricerca batch richiedono un piano superiore.
Gestione degli errori con gli SDK
// JavaScript
try {
const card = await tcg.cards.get('pokemon-base1-4');
} catch (error) {
if (error.status === 429) {
// Rate limit: controlla il tempo prima del retry
const retryAfter = error.headers['retry-after'];
console.log(`Rate limit. Riprova tra ${retryAfter} secondi`);
} else if (error.status === 401) {
console.error('Chiave API non valida');
}
}
# Python
from tcglookup import TCGLookup, RateLimitError, AuthError
try:
results = tcg.cards.search(name="charizard", game="pokemon")
except RateLimitError as e:
print(f"Rate limit. Riprova tra {e.retry_after} secondi")
except AuthError:
print("Chiave API non valida")