ฉันมีลำดับชั้นของออบเจ็กต์ที่ต้องแสดงผ่าน RESTful API และฉันไม่แน่ใจว่า URL ของฉันควรมีโครงสร้างอย่างไรและควรส่งคืนอะไร ฉันไม่พบแนวทางปฏิบัติที่ดีที่สุด
สมมติว่าฉันมีสุนัขและแมวที่สืบทอดมาจากสัตว์ ฉันต้องการการผ่าตัด CRUD กับสุนัขและแมว ฉันยังต้องการที่จะดำเนินการกับสัตว์โดยทั่วไป
ความคิดแรกของฉันคือการทำสิ่งนี้:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
สิ่งนี้คือตอนนี้คอลเลกชัน / สัตว์ "ไม่สอดคล้องกัน" เนื่องจากสามารถส่งคืนและรับวัตถุที่ไม่มีโครงสร้างเหมือนกัน (สุนัขและแมว) ถือว่า "RESTful" มีคอลเล็กชันที่ส่งคืนอ็อบเจ็กต์ที่มีแอตทริบิวต์ต่างกันหรือไม่
อีกวิธีหนึ่งคือการสร้าง URL สำหรับคอนกรีตแต่ละประเภทดังนี้:
GET /dogs # get all dogs
POST /dogs # create a dog
GET /dogs/123 # get dog 123
GET /cats # get all cats
POST /cats # create a cat
GET /cats/123 # get cat 123
แต่ตอนนี้ความสัมพันธ์ระหว่างสุนัขและแมวเสียไป หากมีความประสงค์ที่จะเรียกคืนสัตว์ทั้งหมดต้องสอบถามทรัพยากรทั้งสุนัขและแมว จำนวน URL จะเพิ่มขึ้นตามประเภทย่อยของสัตว์แต่ละชนิด
ข้อเสนอแนะอีกประการหนึ่งคือการเพิ่มโซลูชันที่สองโดยเพิ่มสิ่งนี้:
GET /animals # get common attributes of all animals
ในกรณีนี้สัตว์ที่ส่งคืนจะมีเฉพาะแอตทริบิวต์ที่เหมือนกันสำหรับสัตว์ทุกชนิดโดยทิ้งคุณลักษณะเฉพาะสุนัขและแมว สิ่งนี้ช่วยให้สามารถดึงสัตว์ทั้งหมดได้แม้ว่าจะมีรายละเอียดน้อยกว่าก็ตาม แต่ละออบเจ็กต์ที่ส่งคืนอาจมีลิงก์ไปยังเวอร์ชันที่เป็นรูปธรรมโดยละเอียด
ความคิดเห็นหรือข้อเสนอแนะใด ๆ ?