Обработка ошибок
HTTP-коды статусов TCG Price Lookup API, формат ответов об ошибках и способы их устранения.
Формат ответа об ошибке
Все ошибки возвращают единообразный JSON-формат:
{
"error": {
"code": "error_code",
"message": "Понятное описание ошибки",
"details": {}
}
}
HTTP-коды статусов
| Код | Описание |
|---|---|
200 | Успех |
400 | Некорректный запрос (неверные параметры) |
401 | Не аутентифицирован (неверный или отсутствующий API-ключ) |
403 | Запрещено (ограничения плана) |
404 | Не найдено (карта или ресурс не существует) |
429 | Слишком много запросов (превышен лимит) |
500 | Ошибка сервера |
Распространённые ошибки и их решение
401 Unauthorized
{ "error": { "code": "unauthorized", "message": "Invalid or missing API key" } }
Решение: Проверьте API-ключ. Убедитесь, что заголовок X-API-Key установлен правильно.
429 Too Many Requests
{ "error": { "code": "rate_limit_exceeded", "message": "Daily limit reached" } }
В ответе содержится заголовок Retry-After с количеством секунд до следующего запроса:
Retry-After: 3600
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1704067200
Решение: Соблюдайте заголовок Retry-After. Дневной лимит сбрасывается в полночь UTC. При необходимости большего количества запросов перейдите на более высокий план.
403 Forbidden
{ "error": { "code": "feature_not_available", "message": "Price history requires Trader plan" } }
Решение: Такие функции как история цен, цены градированных карт и пакетный поиск требуют более высокого плана.
Обработка ошибок в SDK
// JavaScript
try {
const card = await tcg.cards.get('pokemon-base1-4');
} catch (error) {
if (error.status === 429) {
// Лимит запросов: проверьте время до повтора
const retryAfter = error.headers['retry-after'];
console.log(`Лимит запросов. Повторите через ${retryAfter} сек.`);
} else if (error.status === 401) {
console.error('Неверный API-ключ');
}
}
# Python
from tcglookup import TCGLookup, RateLimitError, AuthError
try:
results = tcg.cards.search(name="charizard", game="pokemon")
except RateLimitError as e:
print(f"Лимит запросов. Повторите через {e.retry_after} сек.")
except AuthError:
print("Неверный API-ключ")