ลบครั้งแรก : 200 หรือ 204
การลบในภายหลัง : 200 หรือ 204
เหตุผล : DELETE ควรเป็น idempotent หากคุณส่งคืน 404 ใน DELETE วินาทีการตอบกลับของคุณกำลังเปลี่ยนจากรหัสสำเร็จเป็นรหัสข้อผิดพลาดรหัสข้อผิดพลาดโปรแกรมไคลเอ็นต์อาจดำเนินการที่ไม่ถูกต้องตามข้อสันนิษฐานว่า DELETE ล้มเหลว
ตัวอย่าง :
- สมมติว่าการดำเนินการ DELETE ของคุณเป็นส่วนหนึ่งของการดำเนินการหลายขั้นตอน (หรือ "saga") ที่ดำเนินการโดยโปรแกรมไคลเอ็นต์
- โปรแกรมลูกค้าอาจเป็นแอปบนอุปกรณ์เคลื่อนที่ที่ทำธุรกรรมทางธนาคารเป็นต้น
- สมมติว่าโปรแกรมไคลเอนต์มีการลองใหม่โดยอัตโนมัติสำหรับการดำเนินการ DELETE (มันสมเหตุสมผลเพราะ DELETE ควรจะเป็น idempotent)
- สมมติว่าการดำเนินการ DELETE ครั้งแรกประสบความสำเร็จ แต่การตอบกลับ 200 ครั้งหายไประหว่างทางไปยังโปรแกรมไคลเอ็นต์
- โปรแกรมไคลเอนต์จะลอง DELETE อีกครั้ง
- หากความพยายามครั้งที่สองส่งคืน 404 โปรแกรมไคลเอนต์อาจยกเลิกการดำเนินการโดยรวมเนื่องจากรหัสข้อผิดพลาดนี้
- แต่เนื่องจากครั้งแรก DELETE ดำเนินการประสบความสำเร็จบนเซิร์ฟเวอร์ระบบอาจจะทิ้งไว้ที่สถานะไม่สอดคล้องกัน
- หากความพยายามครั้งที่สองส่งกลับ 200 หรือ 204 โปรแกรมไคลเอนต์จะดำเนินการตามที่คาดไว้
เพื่อแสดงให้เห็นถึงการใช้แนวทางนี้คำแนะนำสไตล์ HTTP API สำหรับ PayPalมีแนวทางดังต่อไปนี้:
ลบ: วิธีนี้ควรส่งคืนรหัสสถานะ 204 เนื่องจากไม่จำเป็นต้องส่งคืนเนื้อหาใด ๆ ในกรณีส่วนใหญ่เนื่องจากคำขอคือการลบทรัพยากรและลบได้สำเร็จ
เนื่องจากเมธอด DELETE ต้องเป็น idempotent เช่นกันจึงควรส่งคืน 204 แม้ว่าทรัพยากรจะถูกลบไปแล้วก็ตาม โดยปกติผู้บริโภค API ไม่สนใจว่าทรัพยากรถูกลบเนื่องจากเป็นส่วนหนึ่งของการดำเนินการนี้หรือก่อนหน้านี้ นี่เป็นเหตุผลว่าทำไมควรส่งคืน 204 แทน 404