RoomScope

อัปเดตล่าสุด

ข้อผิดพลาด

ทุกผลลัพธ์ที่ไม่ใช่ 2xx เป็นโครงสร้าง JSON ที่มีสี่ฟิลด์เหมือนกันเสมอ ให้แยกกรณีด้วย code แสดง message ให้ผู้ใช้ บันทึก requestId ลง log และลองใหม่เฉพาะเมื่อ retryable เป็น true

โครงสร้างข้อผิดพลาด

429 Too Many Requests
{  "code": "rate_limit_exceeded",  "message": "API key rate limit exceeded.",  "requestId": "3f2b6c1e-8a4d-4f0e-9b7a-2d5c1e6f8a90",  "retryable": true}
ฟิลด์ชนิดความหมาย
codestringตัวระบุที่คงที่และเครื่องอ่านได้ ในรูปแบบ snake_case ให้แยกกรณีด้วยฟิลด์นี้ อย่าใช้ message
messagestringคำอธิบายภาษาอังกฤษที่คนอ่านเข้าใจได้ แสดงให้ผู้ดูแลระบบเห็นได้อย่างปลอดภัย แต่ถ้อยคำอาจเปลี่ยนแปลงได้
requestIdstringUUID ของคำขอที่เซิร์ฟเวอร์สร้างขึ้น ให้แนบมาเมื่อติดต่อฝ่ายสนับสนุน เพราะเป็นวิธีเดียวที่เราจะค้นหาคำขอนั้นใน log ได้
retryablebooleanเป็น true เมื่อคำขอเดิมอาจสำเร็จได้ในภายหลังโดยไม่ต้องแก้ไข (ขีดจำกัดอัตราการเรียก ความล้มเหลวชั่วคราว) กรณีอื่นทั้งหมดต้องส่งคำขอที่ต่างออกไป
รหัสสถานะยังสำคัญ
สถานะ HTTP บอกประเภทแบบกว้าง (4xx ฝั่งคุณ 5xx ฝั่งเรา) ส่วน code บอกเหตุผลแบบละเอียด ไคลเอนต์ที่ดูแค่สถานะจะแยกไม่ออกระหว่างการขาดสโคป กับแพ็กเกจที่ไม่มีโมดูล (ทั้งคู่เป็น 403)

การจัดการข้อผิดพลาด

รูปแบบด้านล่างคือสิ่งที่แดชบอร์ด RoomScope ใช้เอง: แยกวิเคราะห์โครงสร้างข้อผิดพลาด ใช้ http_error แทนเมื่อ body ไม่ใช่ JSON และลองใหม่แบบ exponential backoff เฉพาะเมื่อเซิร์ฟเวอร์ระบุว่าข้อผิดพลาดนั้นลองใหม่ได้

class ApiError extends Error {  constructor(status, { code, message, requestId, retryable }) {    super(message);    Object.assign(this, { status, code, requestId, retryable: Boolean(retryable) });  }} async function call(path, init) {  const res = await fetch(`https://api.toktokdata.live${path}`, init);  if (res.ok) return res.status === 204 ? undefined : res.json();  let envelope = {};  try { envelope = await res.json(); } catch {}  throw new ApiError(res.status, { code: "http_error", message: `Request failed (${res.status})`, ...envelope });} // Retry only when the server says so.async function withRetry(fn, attempts = 3) {  for (let i = 0; ; i++) {    try { return await fn(); }    catch (e) {      if (!(e instanceof ApiError) || !e.retryable || i === attempts - 1) throw e;      await new Promise((r) => setTimeout(r, 500 * 2 ** i));    }  }}

รหัสตามสถานะ

รหัสต่าง ๆ คงที่ แต่อาจมีรหัสใหม่เพิ่มเข้ามา จึงควรจัดการรหัสที่ไม่รู้จักตามสถานะของมัน แต่ละ endpoint ในเอกสารอ้างอิงจะระบุรหัสที่อาจส่งกลับ

สถานะCodeเกิดเมื่อลองใหม่ได้
400validation_errorbody หรือพารามิเตอร์ผิดรูปแบบ message จะระบุชื่อฟิลด์ไม่ได้
400invalid_rankings_inputRankings: ไม่มี board มีค่าที่ยาวเกิน 128 อักขระ หรือค่า limit, leagueTier, period หรือ liveOnly ไม่ถูกต้องไม่ได้
400invalid_cursor · invalid_region · invalid_trend_typecursor, region (สองตัวอักษรสำหรับ insights) หรือประเภทเทรนด์ที่ endpoint ไม่รับไม่ได้
400invalid_live_history_input · invalid_alert_input · invalid_dataset · invalid_formatข้อผิดพลาดของข้อมูลนำเข้าเฉพาะ endpoint โดย message จะบอกว่าต้องแก้ไขอะไรไม่ได้
401unauthorizedไม่มีคีย์ คีย์ผิดรูปแบบ ไม่รู้จัก ถูกเพิกถอน หรือหมดอายุ หรือเวิร์กสเปซไม่ได้ใช้งานอยู่ ส่งพร้อม WWW-Authenticate: Bearerไม่ได้
402credit_cap_exceededคำขอนี้จะทำให้ยอดใช้จ่ายของรอบเกินเพดานเครดิตไม่ได้
403insufficient_scopeคีย์ไม่มีสโคปที่ต้องการ หรือเส้นทางนั้นใช้ได้เฉพาะในแดชบอร์ดไม่ได้
403module_not_entitledแพ็กเกจของเวิร์กสเปซไม่รวมโมดูล LIVE หรือโมดูลค้นหาไม่ได้
403export_format_not_entitledแพ็กเกจไม่รวมรูปแบบไฟล์ส่งออกนั้นไม่ได้
404not_foundไม่มีเส้นทางที่ตรงกับ method และ pathไม่ได้
404creator_not_found · video_not_found · live_session_not_found · alert_not_found · export_not_foundไม่มีทรัพยากรนั้น หรือเป็นของเวิร์กสเปซอื่นไม่ได้
409export_not_ready · api_key_limit_reachedไฟล์ส่งออกยังสร้างไม่เสร็จ หรือจำนวนคีย์ถึงขีดจำกัดของแพ็กเกจแล้วไม่ได้
429rate_limit_exceededคีย์ส่งคำขอเกินจำนวนต่อวินาที ให้ปฏิบัติตาม Retry-Afterได้
429daily_quota_exceededคีย์ใช้โควตารายวันหมดแล้ว Retry-After นับถึงเที่ยงคืน UTCได้
503rate_limit_unavailable · metering_unavailable · webhook_unavailableบริการที่ระบบพึ่งพาอยู่ล่ม ให้ลองใหม่พร้อม backoffได้
500internal_errorเกิดข้อผิดพลาดฝั่งเรา ให้ลองใหม่พร้อม backoff และแนบ requestId เมื่อแจ้งปัญหาได้

สิ่งที่ไม่ใช่ข้อผิดพลาด

  • region ที่ไม่รู้จักหรือไม่ครอบคลุมใน rankings ไม่ถือเป็นข้อผิดพลาด ผลลัพธ์จะเป็น 200 พร้อม publishable: false รายการ entries ที่ว่างเปล่า และ provenance ที่อธิบายเหตุผล
  • รายการที่กำลังติดตาม ผู้ติดตาม และความคิดเห็นที่กำลังเก็บข้อมูลจะตอบกลับเป็น 202 พร้อม status: "collecting", jobId และ header Retry-After ให้เรียกอีกครั้งหลังผ่านไปตามจำนวนวินาทีนั้น

ขีดจำกัดอัตราการเรียกมีหน้าเฉพาะ: ขีดจำกัดอัตราการเรียก

หน้านี้มีประโยชน์หรือไม่