ฉันกำลังเขียนบริการ RESTful สำหรับระบบการจัดการลูกค้าและฉันพยายามค้นหาวิธีปฏิบัติที่ดีที่สุดสำหรับการปรับปรุงระเบียนบางส่วน ตัวอย่างเช่นฉันต้องการให้ผู้โทรสามารถอ่านบันทึกทั้งหมดด้วยคำขอ GET แต่สำหรับการอัปเดตจะอนุญาตการดำเนินการบางอย่างในบันทึกเท่านั้นเช่นเปลี่ยนสถานะจากเปิดใช้งานเป็นปิดใช้งาน (ฉันมีสถานการณ์ที่ซับซ้อนกว่านี้)
ฉันไม่ต้องการให้ผู้โทรส่งเร็กคอร์ดทั้งหมดที่มีเพียงฟิลด์ที่อัปเดตด้วยเหตุผลด้านความปลอดภัย (มันรู้สึกเหมือน overkill)
มีวิธีที่แนะนำในการสร้าง URIs หรือไม่? เมื่ออ่าน REST หนังสือสไตล์ RPC โทรดูเหมือนจะขมวดคิ้ว
หากการโทรต่อไปนี้ส่งคืนระเบียนลูกค้าแบบเต็มสำหรับลูกค้าที่มี id 123
GET /customer/123
<customer>
{lots of attributes}
<status>ENABLED</status>
{even more attributes}
</customer>
ฉันจะอัปเดตสถานะได้อย่างไร
POST /customer/123/status
<status>DISABLED</status>
POST /customer/123/changeStatus
DISABLED
...
อัปเดต : เพื่อเพิ่มคำถาม วิธีหนึ่งรวม 'การเรียกตรรกะทางธุรกิจ' ลงใน REST api อย่างไร มีวิธีที่ตกลงกันในการทำเช่นนี้? ไม่ใช่วิธีการทั้งหมดที่ CRUD โดยธรรมชาติ บางอันมีความซับซ้อนมากขึ้นเช่น ' sendEmailToCustomer (123) ', ' mergeCustomers (123, 456) ', ' countCustomers () '
POST /customer/123?cmd=sendEmail
POST /cmd/sendEmail?customerId=123
GET /customer/count
POST
จาก Roy Fielding ตัวเอง: roy.gbiv.com/untangled/2009/it-is-okay-to-use-postโดยที่ความคิดพื้นฐานคือถ้าไม่มี 't วิธีการ (เช่นGET
หรือPUT
)POST
เหมาะกับการใช้งานการทำงานของคุณ