7
การออกแบบ REST api โดย URI เทียบกับสตริงแบบสอบถาม
สมมติว่าฉันมีสามทรัพยากรที่เกี่ยวข้องดังนี้: Grandparent (collection) -> Parent (collection) -> and Child (collection) ด้านบนแสดงให้เห็นถึงความสัมพันธ์ระหว่างทรัพยากรเหล่านี้เช่น: ปู่ย่าตายายแต่ละคนสามารถแมปกับผู้ปกครองหนึ่งหรือหลายคน ผู้ปกครองแต่ละคนสามารถแมปกับเด็กคนหนึ่งหรือหลายคน ฉันต้องการความสามารถในการสนับสนุนการค้นหากับทรัพยากรลูก แต่ด้วยเกณฑ์ตัวกรอง: หากลูกค้าของฉันส่งรหัสอ้างอิงถึงปู่ย่าตายายให้ฉันฉันต้องการค้นหาเฉพาะเด็กที่เป็นทายาทสายตรงของปู่ย่าตายายนั้นเท่านั้น หากลูกค้าของฉันส่งรหัสอ้างอิงไปยังผู้ปกครองฉันต้องการค้นหาเฉพาะเด็กที่เป็นผู้สืบทอดโดยตรงจากผู้ปกครองของฉัน ฉันคิดถึงบางสิ่งเช่นนั้น: GET /myservice/api/v1/grandparents/{grandparentID}/parents/children?search={text} และ GET /myservice/api/v1/parents/{parentID}/children?search={text} สำหรับข้อกำหนดข้างต้นตามลำดับ แต่ฉันสามารถทำอะไรเช่นนี้: GET /myservice/api/v1/children?search={text}&grandparentID={id}&parentID=${id} ในการออกแบบนี้ฉันสามารถอนุญาตให้ลูกค้าของฉันส่งต่อฉันอย่างใดอย่างหนึ่งในสตริงการสืบค้น: grandparentID หรือ parentID แต่ไม่ใช่ทั้งสองอย่าง คำถามของฉันคือ: 1) การออกแบบ API ใดที่สงบมากขึ้นและทำไม ความหมายพวกมันหมายถึงและประพฤติตนในลักษณะเดียวกัน ทรัพยากรสุดท้ายใน URI คือ "children" หมายความว่าไคลเอ็นต์กำลังทำงานบนทรัพยากรชายด์อย่างมีประสิทธิภาพ 2) อะไรคือข้อดีข้อเสียของแต่ละคนในแง่ของความเข้าใจในมุมมองของลูกค้าและการบำรุงรักษาจากมุมมองของนักออกแบบ 3) สตริงการสืบค้นที่ใช้จริงๆนอกเหนือจาก "การกรอง" ในทรัพยากรของคุณคืออะไร หากคุณใช้วิธีแรกพารามิเตอร์ตัวกรองจะถูกฝังใน …