Error Handling

HTTP status code, รูปแบบ error response และวิธีจัดการ error ของ TCG Price Lookup API


รูปแบบ Error Response

ทุก error return รูปแบบ JSON ที่สอดคล้องกัน:

{
  "error": {
    "code": "error_code",
    "message": "คำอธิบาย error ที่มนุษย์อ่านได้",
    "details": {}
  }
}

HTTP Status Code

Codeคำอธิบาย
200สำเร็จ
400Bad Request (parameter ไม่ถูกต้อง)
401Unauthorized (API key ไม่ถูกต้องหรือขาดหาย)
403Forbidden (การจำกัดการเข้าถึงตามแพ็กเกจ)
404Not Found (ไม่พบการ์ดหรือ resource)
429Too Many Requests (เกิน rate limit)
500Server Error

Error ที่พบบ่อยและวิธีแก้ไข

401 Unauthorized

{ "error": { "code": "unauthorized", "message": "Invalid or missing API key" } }

วิธีแก้: ตรวจสอบ API key ยืนยันว่า header X-API-Key ตั้งค่าถูกต้อง

429 Too Many Requests

{ "error": { "code": "rate_limit_exceeded", "message": "Daily limit reached" } }

Response จะมี header Retry-After บอกจำนวนวินาทีก่อน request ถัดไป:

Retry-After: 3600
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1704067200

วิธีแก้: ปฏิบัติตาม header Retry-After limit รายวันรีเซ็ตทุกเที่ยงคืน UTC ถ้าต้องการ request มากกว่านี้ให้ upgrade แพ็กเกจ

403 Forbidden

{ "error": { "code": "feature_not_available", "message": "Price history requires Trader plan" } }

วิธีแก้: ฟีเจอร์เช่น price history, graded price และ batch search ต้องการแพ็กเกจที่สูงกว่า

Error Handling ด้วย SDK

// JavaScript
try {
  const card = await tcg.cards.get('pokemon-base1-4');
} catch (error) {
  if (error.status === 429) {
    // Rate limit: ดูเวลาก่อน retry
    const retryAfter = error.headers['retry-after'];
    console.log(`Rate limit กรุณา retry ใน ${retryAfter} วินาที`);
  } else if (error.status === 401) {
    console.error('API key ไม่ถูกต้อง');
  }
}
# Python
from tcglookup import TCGLookup, RateLimitError, AuthError

try:
    results = tcg.cards.search(name="charizard", game="pokemon")
except RateLimitError as e:
    print(f"Rate limit กรุณา retry ใน {e.retry_after} วินาที")
except AuthError:
    print("API key ไม่ถูกต้อง")