(ขออภัยครั้งแรกของฉันผ่านฉันพลาด / แก้ไข / และ / ลบ / ใน (2) ... )
ความคิดของ URI คือว่ามันเป็นตัวบ่งชี้ของทรัพยากรแอดเดรสมากกว่าวิธีการอุทธรณ์ ดังนั้น URI ควรชี้ไปที่ทรัพยากรเฉพาะ และถ้าคุณให้ความเคารพ URI คุณควรได้รับทรัพยากรเดียวกันเสมอ
นั่นคือคุณควรคิดถึง URIs ในแบบเดียวกับที่คุณคิดเกี่ยวกับคีย์หลักของแถวในฐานข้อมูล ระบุสิ่งที่ไม่ซ้ำกัน: Universal Resource Identifier
ดังนั้นไม่ว่าคุณจะใช้พหูพจน์หรือเอกพจน์ URI ควรเป็นตัวระบุแทนการเรียกใช้ สิ่งที่คุณพยายามจะทำในวิธีการคือ: GET (รับ), PUT (สร้าง / อัปเดต), DELETE (ลบ) หรือ POST (ทุกอย่าง)
ดังนั้น "/ item / delete / 123" จึงหยุดพัก REST เพราะมันไม่ได้ชี้ไปที่ทรัพยากรมันเป็นการเรียกใช้เมธอดมากกว่า
(นอกจากนี้เพียงแค่ความหมายคุณควรจะได้รับ URI ตัดสินใจว่ามันล้าสมัยแล้วลบURI เดียวกัน - เพราะมันเป็นตัวระบุหาก GET URI ไม่มี "/ ลบ /" และลบ จากนั้นขัดแย้งกับ HTTP semantics คุณกำลังออกอากาศ 2 หรือมากกว่า URIs ต่อทรัพยากรโดยที่ 1 จะทำ)
ตอนนี้การโกงคือ: ไม่มีคำจำกัดความที่ชัดเจนว่าอะไรคืออะไรและไม่ใช่ทรัพยากรดังนั้นการหลบหลีกใน REST ก็คือการกำหนด "คำนามการประมวลผล" และชี้ URI ไปที่นั้น นั่นเป็นเกมคำศัพท์ที่ค่อนข้างมาก แต่มันตอบสนองความหมายได้ดี
ตัวอย่างเช่นถ้าคุณไม่สามารถใช้สิ่งนี้ด้วยเหตุผลบางอย่าง:
DELETE /items/123
คุณสามารถประกาศให้โลกรู้ว่าคุณมีทรัพยากรการดำเนินการ "ลบ" และการใช้งาน
POST /items/deletor { id: 123 }
ตอนนี้มันดูเหมือน RPC (การเรียกขั้นตอนระยะไกล) มาก แต่มันก็ผ่านช่องโหว่อันกว้างใหญ่ของส่วนคำสั่ง "การประมวลผลข้อมูล" ของ POST ของข้อกำหนดในการตั้งชื่อ HTTP spec
อย่างไรก็ตามการทำเช่นนั้นถือว่ายอดเยี่ยมมากและถ้าคุณสามารถใช้ PUT ทั่วไปสำหรับการสร้าง / อัปเดต DELETE สำหรับการลบและ POST สำหรับการผนวกสร้างและอื่น ๆ คุณควรจะใช้เพราะมันเป็น HTTP ที่ใช้มาตรฐานมากกว่า แต่ถ้าคุณมีกรณีที่มีเล่ห์เหลี่ยมเช่น "ส่งมอบ" หรือ "เผยแพร่" หรือ "ทำซ้ำ" ดังนั้นกรณีที่ใช้คำนามของหน่วยประมวลผลจะเป็นไปตามที่ REST purists และยังคงให้ความหมายที่คุณต้องการ
PUT
และDELETE
ฉันชอบที่จะเพิ่มไปยังเส้นทางไม่แตกต่างกับสตริงแบบสอบถาม ไม่ใช่การแก้ไขสตริงการสืบค้นสำหรับการดำเนินการที่มีอยู่ มันเป็นการดำเนินการแยกต่างหาก