แม้ว่าข้อมูลจำเพาะ HTTP 1.1ดูเหมือนจะอนุญาตเนื้อหาข้อความในคำขอDELETEแต่ดูเหมือนว่าจะระบุว่าเซิร์ฟเวอร์ควรละเว้นเนื่องจากไม่มีความหมายที่กำหนดไว้
4.3 เนื้อหาข้อความ
เซิร์ฟเวอร์ควรอ่านและส่งต่อเนื้อหาข้อความตามคำขอใด ๆ หากวิธีการร้องขอไม่รวมความหมายที่กำหนดไว้สำหรับเอนทิตี - เนื้อความควรละเว้นเนื้อหาข้อความเมื่อจัดการกับคำขอ
ฉันได้ตรวจสอบการอภิปรายที่เกี่ยวข้องหลายหัวข้อเกี่ยวกับ SO และอื่น ๆ แล้วเช่น:
- อนุญาตให้ใช้เนื้อหาเอนทิตีสำหรับคำขอ HTTP DELETE หรือไม่
- เพย์โหลดของวิธีการขอ HTTP
- HTTP รับพร้อมเนื้อหาคำขอ
การอภิปรายส่วนใหญ่ดูเหมือนจะเห็นพ้องต้องกันว่าอาจอนุญาตให้มีเนื้อหาข้อความใน DELETE ได้แต่โดยทั่วไปไม่แนะนำ
นอกจากนี้ฉันสังเกตเห็นแนวโน้มในไลบรารีไคลเอ็นต์ HTTP ต่างๆซึ่งดูเหมือนว่าจะมีการบันทึกการปรับปรุงมากขึ้นเรื่อย ๆ สำหรับไลบรารีเหล่านี้เพื่อรองรับเนื้อหาคำขอใน DELETE ห้องสมุดส่วนใหญ่ดูเหมือนจะบังคับแม้ว่าบางครั้งจะมีการต่อต้านเล็กน้อย
กรณีการใช้งานของฉันเรียกร้องให้เพิ่มข้อมูลเมตาที่จำเป็นบางอย่างใน DELETE (เช่น "เหตุผล" ในการลบพร้อมกับข้อมูลเมตาอื่น ๆ ที่จำเป็นสำหรับการลบ) ฉันได้พิจารณาตัวเลือกต่อไปนี้ซึ่งไม่มีตัวเลือกใดที่เหมาะสมและสอดคล้องกับข้อกำหนด HTTP และ / หรือแนวทางปฏิบัติที่ดีที่สุดของ REST:
- Message Body - ข้อมูลจำเพาะระบุว่าเนื้อหาของข้อความบน DELETE ไม่มีค่าความหมาย ไคลเอ็นต์ HTTP ไม่ได้รับการสนับสนุนอย่างเต็มที่ ไม่ใช่แนวทางปฏิบัติมาตรฐาน
- ที่กำหนดเองส่วนหัว HTTP - การกำหนดส่วนหัวที่กำหนดเองโดยทั่วไปกับมาตรฐานการปฏิบัติ ; การใช้พวกเขาไม่สอดคล้องกับส่วนที่เหลือของ API ของฉันซึ่งไม่ต้องใช้ส่วนหัวที่กำหนดเอง ยิ่งไปกว่านั้นไม่มีการตอบสนอง HTTP ที่ดีเพื่อระบุค่าส่วนหัวที่กำหนดเองที่ไม่ถูกต้อง (อาจเป็นคำถามแยกกันทั้งหมด)
- ส่วนหัว HTTP มาตรฐาน - ไม่มีส่วนหัวมาตรฐานที่เหมาะสม
- พารามิเตอร์การสืบค้น - การเพิ่มพารามิเตอร์แบบสอบถามจะเปลี่ยนคำขอ -URI ที่ถูกลบไป การปฏิบัติตามมาตรฐาน
- วิธีการโพสต์ - (เช่น
POST /resourceToDelete { deletemetadata }
) POST ไม่ใช่ตัวเลือกเชิงความหมายสำหรับการลบ POST แสดงถึงการกระทำตรงข้ามที่ต้องการ (เช่น POST สร้างผู้ใต้บังคับบัญชาทรัพยากร แต่ฉันต้องการลบทรัพยากร) - วิธีการหลายวิธี - การแยกคำขอ DELETE ออกเป็นสองการดำเนินการ (เช่น PUT ลบข้อมูลเมตาจากนั้น DELETE) จะแยกการดำเนินการอะตอมออกเป็นสองส่วนซึ่งอาจทำให้สถานะไม่สอดคล้องกัน เหตุผลในการลบ (และข้อมูลเมตาอื่น ๆ ที่เกี่ยวข้อง) ไม่ได้เป็นส่วนหนึ่งของการแสดงทรัพยากรเอง
ความชอบอันดับแรกของฉันคือการใช้เนื้อหาข้อความรองจากส่วนหัว HTTP ที่กำหนดเอง อย่างไรก็ตามตามที่ระบุไว้มีข้อเสียบางประการสำหรับแนวทางเหล่านี้
มีคำแนะนำหรือแนวทางปฏิบัติที่ดีที่สุดที่สอดคล้องกับมาตรฐาน REST / HTTP สำหรับการรวมข้อมูลเมตาที่จำเป็นในคำขอ DELETE หรือไม่ มีทางเลือกอื่นที่ฉันไม่ได้พิจารณาหรือไม่?
Jersey
ไม่อนุญาตให้มีเนื้อหาสำหรับdelete
คำขอ