ฉันไม่ชอบที่จะเห็น{id}
ส่วนของ URL ที่ทับซ้อนกับทรัพยากรย่อยในฐานะid
ทางทฤษฎีอาจเป็นอะไรก็ได้และจะมีความกำกวม มันกำลังผสมแนวคิดที่แตกต่างกัน (ตัวระบุและชื่อทรัพยากรย่อย)
ปัญหาที่คล้ายกันมักจะเห็นในenum
ค่าคงที่หรือโฟลเดอร์โครงสร้างที่แนวคิดที่แตกต่างกันผสม (ตัวอย่างเช่นเมื่อคุณมีโฟลเดอร์Tigers
, Lions
และCheetahs
แล้วยังโฟลเดอร์ที่เรียกว่าAnimals
อยู่ในระดับเดียวกัน - นี้ทำให้รู้สึกไม่เป็นหนึ่งเป็นส่วนหนึ่งของ อื่น ๆ )
โดยทั่วไปฉันคิดว่าส่วนสุดท้ายของปลายทางควรเป็นเอกเทศหากเกี่ยวข้องกับกิจการเดี่ยวในเวลาเดียวกันและเป็นพหูพจน์หากเกี่ยวข้องกับรายการของหน่วยงาน
ดังนั้นปลายทางที่จัดการกับผู้ใช้คนเดียว:
GET /user -> Not allowed, 400
GET /user/{id} -> Returns user with given id
POST /user -> Creates a new user
PUT /user/{id} -> Updates user with given id
DELETE /user/{id} -> Deletes user with given id
จากนั้นมีทรัพยากรแยกต่างหากสำหรับการทำแบบสอบถามกับผู้ใช้ซึ่งโดยทั่วไปแล้วจะส่งคืนรายการ:
GET /users -> Lists all users, optionally filtered by way of parameters
GET /users/new?since=x -> Gets all users that are new since a specific time
GET /users/top?max=x -> Gets top X active users
และนี่คือตัวอย่างของทรัพยากรย่อยที่เกี่ยวข้องกับผู้ใช้เฉพาะ:
GET /user/{id}/friends -> Returns a list of friends of given user
ทำความรู้จักกับเพื่อน (หลายต่อหลายลิงก์):
PUT /user/{id}/friend/{id} -> Befriends two users
DELETE /user/{id}/friend/{id} -> Unfriends two users
GET /user/{id}/friend/{id} -> Gets status of friendship between two users
ไม่เคยมีความกำกวมใด ๆ และการตั้งชื่อพหูพจน์หรือเอกพจน์ของทรัพยากรเป็นคำแนะนำให้กับผู้ใช้สิ่งที่พวกเขาสามารถคาดหวัง (รายการหรือวัตถุ) ไม่มีข้อ จำกัด เกี่ยวกับid
s ตามหลักเหตุผลทำให้ผู้ใช้มี id new
โดยไม่ทับซ้อนกับชื่อรีซอร์สย่อย (ในอนาคตที่เป็นไปได้)