การผสานรวมที่ดีไม่เพียงใช้งานได้เมื่อทุกอย่างราบรื่น แต่ยังรู้ว่าต้องทำอย่างไรเมื่อเซิร์ฟเวอร์ปฏิเสธคำขอ บทความนี้จะกล่าวถึงสองสิ่งที่มักทำให้เกิดปัญหากับการรวม Kencang.in API: เกินขีดจำกัดอัตราและข้อผิดพลาดในการตีความผิด
ขีดจำกัดอัตราทำงานอย่างไร
ขีดจำกัดอัตราจำกัดจำนวนคำขอต่อนาทีต่อคีย์ API เป้าหมายคือเพื่อรักษาเสถียรภาพของบริการสำหรับผู้ใช้ทุกคน ขีดจำกัดขึ้นอยู่กับแพ็กเกจ: Pro ได้รับ 60 คำขอต่อนาที ธุรกิจ 300 ต่อนาที รายละเอียดอยู่ในหน้า ราคา. การนับจะรีเซ็ตทุกนาที (กรอบเวลาคงที่) ไม่ใช่กรอบเวลาที่เลื่อน
คำตอบแต่ละรายการมีส่วนหัว:
X-RateLimit-Limit: ขีดจำกัดต่อนาทีสำหรับคีย์ของคุณX-RateLimit-Remaining: คำขอที่เหลืออยู่ในนาทีที่กำลังทำงานRetry-After: เฉพาะการตอบสนอง 429 ซึ่งเป็นจำนวนวินาทีก่อนที่คุณจะลองอีกครั้ง ส่วนหัวนี้เป็นมาตรฐานใน MDN.
กลยุทธ์เพื่อหลีกเลี่ยงการโดน 429
- กองอยู่ข้างคุณ หากคุณต้องการสร้างลิงก์ 500 ลิงก์ อย่าเริ่มลิงก์ทั้งหมดพร้อมกัน เข้าคิวและดำเนินการตามขีดจำกัด เช่น 50 ครั้งต่อนาทีโดยมีการพักคู่
- แคชผลลัพธ์ ข้อมูลที่ไม่ค่อยเปลี่ยนแปลง เช่น รายการโดเมนหรือรายละเอียดลิงก์ ไม่จำเป็นต้องขอซ้ำๆ
- ใช้เอนด์พอยต์รายการแบบแบ่งหน้า แทนที่จะเรียกรายละเอียดทีละรายการ
- จอภาพ
X-RateLimit-Remainingและชะลอความเร็วลงเมื่อเข้าใกล้ศูนย์
จัดการ 429 พร้อมแบ็คออฟเอ็กซ์โปเนนเชียล
เมื่อรับ 429 แล้วให้ความเคารพ Retry-After. หากไม่มีส่วนหัว ให้ใช้ Exponential Backoff: รอ 1, 2, 4, 8 วินาที บวกกับ Jitter แบบสุ่ม เพื่อไม่ให้ไคลเอ็นต์หลายตัวลองอีกครั้งในวินาทีเดียวกัน รูปแบบนี้ได้รับการแนะนำอย่างกว้างขวาง รวมทั้งใน คำแนะนำในการลอง Google Cloud อีกครั้ง.

รหัสข้อผิดพลาดและความหมาย

- 400 คำขอไม่ถูกต้อง: เนื้อความไม่ใช่ JSON ที่ถูกต้องหรือพารามิเตอร์ที่จำเป็นขาดหายไป ตรวจสอบ
Content-Typeและโครงสร้างเพย์โหลด - 401 ไม่ได้รับอนุญาต: รหัส API หายไป ไม่ถูกต้อง หรือถูกเพิกถอนแล้ว อย่าลองอีกครั้ง แก้ไขล็อค
- 403 ต้องห้าม: คุณลักษณะที่ไม่รวมอยู่ในแพ็กเกจของคุณ เช่น โดเมนที่มีแบรนด์ในแพ็กเกจฟรี หรือโควต้าลิงก์รายเดือนหมด
- 404 ไม่พบ: ไม่มี ID ลิงก์หรือไม่ได้เป็นของบัญชีของคุณ
- 429 คำขอมากเกินไป: ขีดจำกัดอัตรา รอและทำซ้ำ
- 500/502/503: การหยุดชะงักชั่วคราวทางฝั่งเซิร์ฟเวอร์ ลองอีกครั้งโดยใช้การถอยกลับ สูงสุดหลายครั้ง จากนั้นจึงบันทึกเพื่อตรวจสอบ
นอกจากสถานะ HTTP แล้ว เนื้อหาการตอบสนองจะโหลดอยู่เสมอ error และ message. ข้อผิดพลาดในการตรวจสอบธุรกิจ เช่น "มีการใช้ชื่อย่อแล้ว" หรือ "URL ถูกบล็อกเนื่องจากเป็นอันตราย" จะถูกส่งกลับด้วยสถานะ 200 และ error: 1. ดังนั้นตรวจสอบทั้งสองออก การตรวจสอบความปลอดภัยของ URL มีการอธิบายไว้ในบทความ ความปลอดภัยของลิงก์สั้น.
การทำงานซ้ำโดยให้ผลเดิมและรายการซ้ำ
หากคำขอ POST หมดเวลาบนเครือข่าย คุณจะไม่ทราบว่ามีการสร้างลิงก์หรือไม่ การทำซ้ำสิ่งนี้สามารถสร้างลิงก์ได้สองลิงก์ วิธีแก้ไข: ใช้ชื่อย่อที่กำหนด (เช่น รหัสคำสั่งซื้อ) หากมีชื่อย่ออยู่แล้ว API จะส่งคืนข้อผิดพลาด "ชื่อย่อที่ใช้งานแล้ว" และแอปของคุณสามารถดึงลิงก์ที่มีอยู่ผ่านทางเอนด์พอยต์การค้นหา แทนที่จะสร้างลิงก์ใหม่
การบันทึกที่มีประโยชน์
หมายเหตุสำหรับการเรียกใช้แต่ละรายการ: เอนด์พอยต์, สถานะ HTTP, ค่า X-RateLimit-Remainingและ message เมื่อเกิดข้อผิดพลาด อย่าบันทึกคีย์ API บันทึกเหล่านี้ช่วยให้เห็นรูปแบบ เช่น รหัส 429 เพิ่มขึ้นทุกเช้าเวลา 9 น. เมื่อ cron ทำงาน จากนั้นจึงกระจายตารางการทำงาน
ควรอัปเกรดแพ็กเกจเมื่อใด
หากบันทึกแสดงว่าคุณถึงขีดจำกัดเป็นประจำแม้จะทำการแบทช์ นั่นเป็นสัญญาณของการโหลดจริง ไม่ใช่จุดบกพร่อง แพ็กเกจธุรกิจให้บริการ 300 คำขอต่อนาทีและลิงก์ไม่จำกัด สำหรับความต้องการข้างต้น ติดต่อเรา สำหรับแพ็กเกจแบบกำหนดเอง ตัวอย่างโค้ดพื้นฐานสำหรับทั้งสามภาษาอยู่ในบทความ ตัวอย่างโค้ด APIและเอกสารฉบับสมบูรณ์ได้ที่ หน้านักพัฒนาซอฟต์แวร์.
คำถามที่พบบ่อย
ขีดจำกัดอัตราคำนวณต่อบัญชีหรือต่อคีย์
ต่อคีย์ API หากคุณใช้การผสานรวมหลายรายการ ให้สร้างคีย์แยกกันสำหรับแต่ละการผสานรวมเพื่อให้การผสานรวมที่ไม่ว่างอันหนึ่งไม่กินโควต้าของการผสานรวมอื่น และเพื่อให้การตรวจสอบการใช้งานอ่านได้ง่ายขึ้นในแดชบอร์ด
คำขอที่ถูกปฏิเสธด้วยจำนวน 429 นับหรือไม่
ไม่ คำขอที่ถูกปฏิเสธเนื่องจากเกินขีดจำกัดจะไม่ลดโควต้านาทีถัดไป แต่การส่งคำขออย่างต่อเนื่องเมื่อทรัพยากรสิ้นเปลืองถูกควบคุมแล้ว ดังนั้นให้เคารพส่วนหัว Retry-After
จะเพิ่มขีดจำกัดคำขอได้อย่างไร
อัปเกรดเป็นแพ็กเกจธุรกิจเพื่อรับ 300 คำขอต่อนาที สำหรับความต้องการที่สูงกว่านั้น เช่น การบูรณาการกับลิงก์นับล้าน โปรดติดต่อเราเพื่อขอแพ็กเกจแบบกำหนดเองที่มีขีดจำกัดแบบกำหนดเอง
ข้อผิดพลาด 5xx หมายความว่าลิงก์ของฉันหายไปหรือไม่
ไม่ ข้อผิดพลาด 5xx บ่งชี้ว่าการประมวลผลคำขอหยุดชะงักชั่วคราว ไม่ใช่การสูญเสียข้อมูล ลองอีกครั้งโดยถอยกลับ หากไฟฟ้าดับต่อเนื่องนานกว่าสองสามนาที โปรดตรวจสอบหน้าสถานะหรือติดต่อเรา