IOSOR ความรู้

ความไม่ซ้ำของการส่ง API: สำเนาซ้ำ ลองใหม่ และเงิน

คู่มือนักพัฒนาสำหรับ API ส่งแบบเติมเงินล่วงหน้า — คีย์ความไม่ซ้ำ การลองใหม่อย่างปลอดภัย การกันซ้ำ และความสัมพันธ์ที่สมุดบัญชีอ่านได้ เพื่อไม่ให้นิติวิศวกรรมกลายเป็นเหตุการณ์การเงิน

หมดเวลามีจริง ตัวกระจายโหลดลองใหม่ มือถือแตะสองครั้ง หากไม่มีความไม่ซ้ำ ผลิตภัณฑ์ "ส่งครั้งเดียว" จะกลายเป็นหักเงินเติมล่วงหน้าสองครั้งและ OTP ซ้ำ คู่มือนี้สำหรับวิศวกรรมและโปรดักต์เชิงเทคนิคที่เชื่อม API ข้อความเติมเงินล่วงหน้าแบบไวท์เลเบล — สำเนาซ้ำทุกครั้งโผล่ในกระเป๋า. IOSOR คาดหวังการเชื่อมที่รู้เรื่องเงิน: การเรียกที่ยืนยันตัวตน การหักที่จับคู่ได้ และข้อผิดพลาดฝั่งลูกค้าที่ไม่เทเพย์โหลดแบรนด์อื่นใกล้ USD 1,000+ การใช้แพลตฟอร์มต่อเดือน วินัยเรื่องซ้ำไม่ใช่ทางเลือก ถือทุกการส่งเป็นเหตุการณ์สมุดบัญชีก่อน แล้วค่อยเป็นเครือข่าย เพื่อให้การเงินกับ on-call ใช้เรื่องเดียวกัน.

ทำไมสำเนาซ้ำถึงกลายเป็นปัญหาเงิน

โหมดล้มเหลว ผู้ใช้เห็น กระเป๋าเห็น
หมดเวลาฝั่งลูกค้า + ลองใหม่มืด OTP/แจ้งเตือนสองครั้ง หักสองรายการ
ตัวจัดการ webhook ที่ไม่ไม่ซ้ำ ผลข้างเคียงคู่ สับสนตอนสำเร็จ
ส่งซ้ำผู้ใช้ซ้อนบนลองใหม่อัตโนมัติ ผู้ใช้รำคาญ หน่วยทบ
ไม่มีความสัมพันธ์ ตั๋ว "ล้มเหลว" แถวสมุดบัญชีไม่จับคู่

เดโมให้อภัย การเงินโปรดักชันไม่ ที่ความเข้มเติมล่วงหน้า สุดสัปดาห์ลองใหม่มืดกลายเป็นโปรเจกต์กระทบยอด ไม่ใช่เชิงอรรถในล็อก ออกแบบทางสุขและทางหมดเวลาด้วยกฎหักเงินเดียวกัน.

คีย์ความไม่ซ้ำที่ทนการลองใหม่

เส้นทางส่งจริงจังรับคีย์ที่ลูกค้าสร้างซึ่งไม่ซ้ำต่อเจตนาธุรกิจ ไม่ใช่ต่อการลอง TCP เมื่อเล่นซ้ำในหน้าต่าง TTL มันต้องคืนผลที่ยอมรับเดียวกัน สิ่งนี้ป้องกันการหักเงินครั้งที่สองสำหรับเจตนาเดียวกัน บันทึกคีย์คู่กับ message ID และอ้างอิงเติมเงินล่วงหน้า คีย์ต้องทำงานผ่านหมดเวลา ลองใหม่เกตเวย์ และ redrive ของซัพพอร์ต.

งบลองใหม่ vs ส่งซ้ำของผู้ใช้

การลองใหม่อัตโนมัติต้องมีงบ: จำนวนครั้งสูงสุด ถอยหลัง และคลาสข้อผิดพลาดที่ลองใหม่ได้ การส่งซ้ำของผู้ใช้เป็นการกระทำผลิตภัณฑ์อีกแบบ มีขีดจำกัดและต้นทุนเติมล่วงหน้าของตนเอง ผสมกันแล้วเครือข่ายแกว่งจะกลายเป็นเหตุการณ์กระเป๋าสุดสัปดาห์ ผูกทั้งคู่กับการหยุดเมื่อยอดต่ำและเหตุผลปฏิเสธชัดเจน.

เช็กลิสต์ผู้ซื้อ / วิศวกรรม

  1. เอกสารความหมายคีย์ความไม่ซ้ำและ TTL.
  2. ทดสอบการเล่นซ้ำที่พิสูจน์การหักเงินครั้งเดียวต่อเจตนา.
  3. แยกงบการลองใหม่อัตโนมัติจากตรรกะการส่งซ้ำของผู้ใช้.
  4. Correlation ID ตลอดการเรียก สถานะ และสมุดบัญชี.
  5. Staging ที่ทดสอบเส้นทางจริง ไม่ใช่แค่ mock.
  6. สุขอนามัยของคีย์และสิทธิ์ขั้นต่ำสำหรับข้อมูลรับรอง.
  7. จัดการ 429 และ 503 โดยไม่เสียคีย์เจตนาเดิม.
  8. แจ้งเตือนอัตโนมัติสำหรับอัตราการปฏิเสธคีย์ซ้ำที่สูง.

ธงแดง

  • "ลองใหม่จนกว่าจะได้ 200" โดยไม่มีคีย์ความไม่ซ้ำ.
  • ตัวจัดการ webhook ที่ไม่ไม่ซ้ำและกระตุ้นผลข้างเคียงซ้ำ.
  • คีย์ลับหรือโทเค็นในล็อกหรือตั๋วซัพพอร์ต.
  • ข้อผิดพลาดที่แสดงเพย์โหลดแบรนด์ต้นทางแก่ผู้ใช้.
  • ไม่มีการตรวจสอบความแตกต่างระหว่างสมุดบัญชีและเครือข่าย.

เริ่มต้นกับ IOSOR

ในคอนโซลส่ง ยิง OTP หรือการแจ้งเตือนหนึ่งครั้งด้วยคีย์ idempotency ที่ไคลเอนต์สร้าง บังคับหมดเวลาฝั่งไคลเอนต์ แล้วเล่นซ้ำคำขอเดียวกันภายใน TTL ของคีย์ เปิด prepaid ledger ความตั้งใจนั้นต้องแสดง debit หนึ่งรายการและข้อความที่ผู้ใช้เห็นหนึ่งข้อความ สองแถวแปลว่าคีย์ไม่รอดการลองใหม่ แก้ TTL กับตัวจัดการก่อนทางเดินยัง Live.

สรุป IOSOR

ทำ: ถือการส่งทุกครั้งเป็นเหตุการณ์ ledger ก่อน คีย์ไม่ซ้ำตามเจตนาธุรกิจ ไม่ใช่ตามครั้ง TCP การลองใหม่อัตโนมัติมีงบ ผู้ใช้กดส่งอีกครั้งเป็นการกระทำผลิตภัณฑ์อื่นที่มีต้นทุน prepaid ของตัวเอง

อย่า: ทุบจนได้ 200 โดยไม่มีคีย์ หรือปล่อย webhook ที่ไม่ idempotent สร้างผลข้างเคียงครั้งที่สอง OTP สองชุดต่อการแตะครั้งเดียวคือบั๊กเงิน ไม่ใช่เรื่องเครือข่าย

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

คู่มือที่เกี่ยวข้อง