การส่งที่หมดเวลานั้นบันทึกงานของคุณจริงหรือ
ข้อผิดพลาดของเบราว์เซอร์พิสูจน์ว่าคำตอบไม่ได้มาถึง ไม่ใช่การเขียนล้มเหลว บันทึกข้อความ ค้นหาผลลัพธ์ในแอป แล้วจึงตัดสินว่าการลองใหม่ปลอดภัยหรือไม่
ปุ่มหมุน แท็บแสดงข้อผิดพลาด และแบบฟอร์มที่คุณใช้เวลาสิบนาทีกรอกก็หายไป สิ่งที่คุณไม่รู้คือการเขียนไปถึงก่อนที่การเชื่อมต่อจะขาดหรือไม่ การถือความไม่รู้นั้นเป็นความล้มเหลวคือวิธีที่ความคิดเห็นซ้ำ คำสั่งซื้อซ้ำ และตั๋วสนับสนุนที่เกิดซ้ำถูกสร้างขึ้น
กู้คืนตามลำดับที่แน่นอน เก็บข้อความไว้ ค้นหาผลลัพธ์ และหลังจากนั้นจึงตัดสินว่าการส่งครั้งที่สองได้รับอนุญาตหรือไม่
เริ่มจากข้อความและตราเวลา
คัดลอกเนื้อหาออกจากหน้าก่อนแตะสิ่งอื่นใด รวมถึงฉบับร่างที่เบราว์เซอร์ยังเก็บไว้ในช่อง บันทึกเวลา หน้าที่คุณอยู่ และการกระทำที่ทำ เพราะรายละเอียดสามอย่างนี้เองที่ทำให้การสอบสวนที่เหลือเป็นไปได้ หากแท็บยังเปิดอยู่ ให้เปิดไว้จนกว่าจะอ่านรายการเครือข่าย การบันทึกข้อความไม่มีค่าใช้จ่าย และการทำหายมีค่าใช้จ่ายทั้งงาน
จากนั้นแยกความล้มเหลวสองรูปแบบที่คุณสังเกตได้จริง การเชื่อมต่อที่ขาดกลางคำขอและเซิร์ฟเวอร์ที่ตอบด้วยข้อผิดพลาดดูต่างกันในแผงเครือข่าย และมีเพียงอย่างหลังที่บอกอะไรเกี่ยวกับการตัดสินใจของแอป
ค้นหาผลลัพธ์ในมุมมองของแอปเอง
โหลดมุมมองการอ่านที่จะแสดงผลลัพธ์ใหม่ รายการความคิดเห็น ประวัติคำสั่งซื้อ คิวตั๋ว หรือระเบียนที่คุณกำลังแก้ไข จับคู่ตามบัญชี ปลายทาง เวลา และเนื้อหา แทนที่จะดูรายการล่าสุด เพราะคนอื่นอาจเขียนหลังจากคุณ สำหรับงานเบื้องหลัง ให้ค้นหาการอ้างอิงที่มีอยู่และสถานะของมัน แทนที่จะสร้างการดำเนินการใหม่เป็นการทดสอบการเชื่อมต่อ
หากผลลัพธ์อยู่ที่นั่น คุณก็เสร็จ และข้อผิดพลาดเป็นของเส้นทางคำตอบไม่ใช่การเขียน หากไม่มี ให้คงความเป็นไปได้ที่แอปยังไม่ได้ยืนยัน งานในคิว มุมมองการอ่านที่ล่าช้า หรือสำเนาที่ตามหลังอาจซ่อนการเขียนที่สำเร็จไว้ระยะหนึ่ง
ให้การตรวจครั้งที่สองที่กำหนดไว้ก่อนสรุป และบันทึกเวลาของการตรวจทั้งสองครั้ง การตรวจสองครั้งห่างกันยี่สิบวินาทีเป็นหลักฐานที่อ่อนกว่าการตรวจสองครั้งห่างกันสิบนาทีมาก
ตัดสินว่าการส่งครั้งที่สองปลอดภัยหรือไม่
คำตอบขึ้นอยู่กับการดำเนินการ ไม่ใช่ความอดทนของคุณ HTTP แยกวิธีที่ทำซ้ำได้ด้วยผลที่ตั้งใจเหมือนเดิมออกจากวิธีที่ทำไม่ได้ และแนะนำไม่ให้ลองใหม่โดยอัตโนมัติสำหรับประเภทที่สอง เว้นแต่จะทราบว่าไวยากรณ์ความหมายอนุญาต การสร้างความคิดเห็น การสั่งซื้อ และการส่งเงินมักอยู่ในกลุ่มที่สอง จึงเป็นเหตุผลที่คลิกที่สองซึ่งดูสำเร็จไม่บอกอะไรเกี่ยวกับคลิกแรก
หากคุณดูแลไคลเอนต์ ให้ใช้กลไกการลองใหม่หรือการไม่ทำซ้ำที่ API เอกสารไว้ และผูกกับตรรกะการดำเนินการเดียวกันแทนที่จะสร้างคีย์ใหม่สำหรับทุกครั้ง ตัวระบุคำขอที่ใช้ติดตามไม่ใช่คีย์ป้องกันข้อมูลซ้ำ เว้นแต่เซิร์ฟเวอร์จะถือเช่นนั้น
curl -i -X POST https://api.example.net/v1/orders \
-H "Idempotency-Key: 6f1c2a94-3b7e-4a10-9c22-5d0e8f7b1a63" \
-H "Content-Type: application/json" \
--data @order.jsonคีย์ช่วยได้ก็ต่อเมื่อบริการเก็บคีย์นั้นไว้กับการดำเนินการและคืนผลลัพธ์เดิมเมื่อทำซ้ำ ทดสอบพฤติกรรมนั้นที่ปลายทางทดสอบก่อนจะพึ่งพาในการใช้งานจริง
เก็บหลักฐานก่อนกดอะไรอีกครั้ง
เก็บรายการเครือข่ายแทนภาพหน้าจอของข้อผิดพลาด วิธีคำขอ URL คำตอบหรือหมดเวลา และเวลาที่เกิดขึ้นคือสิ่งที่ผู้ดูแลระบบนำไปเทียบกับบันทึกของแอปได้ ส่งออกหรือคัดลอกรายการเป็นคำสั่งเฉพาะเมื่อคุณลบคุกกี้ ส่วนหัวการอนุญาต และเนื้อหาส่วนตัวออกจากสำเนาแล้วเท่านั้น ปล่อยเซสชันของคุณไว้เหมือนเดิม และอย่าเล่นคำขอที่ดักได้ซึ่งมีข้อมูลรับรองซ้ำเป็นทางลัด
ถามเจ้าของบริการหนึ่งคำถามที่เจาะจง การดำเนินการด้วยเนื้อหานี้ในเวลานี้สำเร็จหรือไม่ และมีการอ้างอิงสำหรับมันหรือไม่ คำถามนั้นมีคำตอบ ขณะที่ "เว็บไซต์เสียหรือไม่" ไม่มี
จุดประสงค์ของแบบฝึกหัดคือยืนยันว่าการกระทำเกิดขึ้นเพียงครั้งเดียว ข้อความข้อผิดพลาดที่คุณปิดได้ไม่เหมือนกับบันทึกที่คุณเชื่อถือได้ และอย่างหลังคือสิ่งที่คุณต้องการก่อนส่งสิ่งอื่นใด