ฉันอยู่ระหว่างดำเนินการสร้าง REST API และขณะนี้ฉันกำลังประสบปัญหาดังต่อไปนี้:
- Fooเป็นทรัพยากรแรก การดำเนินการ CRUD สามารถนำไปใช้ผ่าน- /foo/URI
- Barเป็นทรัพยากรที่สอง การดำเนินการ CRUD สามารถนำไปใช้ผ่าน- /bar/URI
- ทุกคนมีความเกี่ยวข้องกับศูนย์หรือหนึ่งFooBarเหตุผลที่ฉันไม่ถือว่าBarเป็นแหล่งข้อมูลย่อยของFooคือเนื่องจากBarอินสแตนซ์เดียวกันสามารถใช้ร่วมกันระหว่าง mutipleFoos ดังนั้นผมจึงคิดว่ามันจะดีกว่าที่จะเข้าถึงได้ผ่านทางเป็นอิสระ URI/foo/[id]/barแทน
ปัญหาของฉันคือในกรณีจำนวนมากลูกค้าที่ขอFooอินสแตนซ์ก็สนใจBarอินสแตนซ์ที่เกี่ยวข้องเช่นกัน ขณะนี้หมายความว่าพวกเขาจะต้องดำเนินการสองแบบสอบถามแทนหนึ่งแบบสอบถาม ฉันต้องการแนะนำวิธีที่ช่วยให้รับวัตถุทั้งสองด้วยการสืบค้นเพียงครั้งเดียว แต่ฉันไม่รู้วิธีจำลอง API สำหรับการทำ สิ่งที่ฉันมาด้วย:
- ฉันสามารถแนะนำพารามิเตอร์การสืบค้นที่คล้ายกับสิ่งนี้: /foo/[id]?include_bar=true. ปัญหาด้วยวิธีการนี้คือการเป็นตัวแทนทรัพยากร (เช่นโครงสร้าง JSON) ของการตอบสนองจะต้องดูแตกต่างกัน (เช่นภาชนะเช่น{ foo: ..., bar: ... }แทนที่จะเป็นแบบอนุกรมFoo) ซึ่งทำให้Fooจุดสิ้นสุดของทรัพยากร "แตกต่าง" ฉันไม่คิดว่ามันเป็นสิ่งที่ดี เมื่อทำการสอบถาม/fooลูกค้าควรได้รับการแสดงทรัพยากรเดียวกัน (โครงสร้าง) เสมอโดยไม่คำนึงถึงพารามิเตอร์การสืบค้น
- /fooandbar/[foo-id]ความคิดก็คือการแนะนำปลายทางอ่านอย่างเดียวใหม่เช่น ในกรณีนี้จะไม่มีปัญหาในการส่งคืนการแสดงแทนเช่น- { foo: ..., bar: ... }นั้นเพราะมันเป็นเพียงการแสดง "อย่างเป็นทางการ" ของ- fooandbarทรัพยากร อย่างไรก็ตามฉันไม่รู้ว่าจุดสิ้นสุดของผู้ช่วยเหลือนั้นสงบหรือไม่ (นี่คือสาเหตุที่ฉันเขียน "สามารถ" ในชื่อคำถามได้แน่นอนว่าเป็นไปได้ทางเทคนิค แต่ฉันไม่รู้ว่าเป็นความคิดที่ดีหรือไม่)
คุณคิดอย่างไร? มีความเป็นไปได้อื่น ๆ อีกไหม?
Bar Fooอย่างไรก็ตามในขณะที่ผมเขียนข้างต้นก็เป็นไปได้ว่าหลายFoos Barแบ่งปันเดียวกัน มันควรจะเป็นไปได้ในการสร้างFooไม่มีโดยไม่Barเกี่ยวข้องดังนั้นฉันไม่คิดว่าBarควรได้รับการปฏิบัติในฐานะผู้ปกครอง