ฉันอยู่ระหว่างดำเนินการสร้าง REST API และขณะนี้ฉันกำลังประสบปัญหาดังต่อไปนี้:
Foo
เป็นทรัพยากรแรก การดำเนินการ CRUD สามารถนำไปใช้ผ่าน/foo/
URIBar
เป็นทรัพยากรที่สอง การดำเนินการ CRUD สามารถนำไปใช้ผ่าน/bar/
URI- ทุกคนมีความเกี่ยวข้องกับศูนย์หรือหนึ่ง
Foo
Bar
เหตุผลที่ฉันไม่ถือว่าBar
เป็นแหล่งข้อมูลย่อยของFoo
คือเนื่องจากBar
อินสแตนซ์เดียวกันสามารถใช้ร่วมกันระหว่าง mutipleFoo
s ดังนั้นผมจึงคิดว่ามันจะดีกว่าที่จะเข้าถึงได้ผ่านทางเป็นอิสระ 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
อย่างไรก็ตามในขณะที่ผมเขียนข้างต้นก็เป็นไปได้ว่าหลายFoo
s Bar
แบ่งปันเดียวกัน มันควรจะเป็นไปได้ในการสร้างFoo
ไม่มีโดยไม่Bar
เกี่ยวข้องดังนั้นฉันไม่คิดว่าBar
ควรได้รับการปฏิบัติในฐานะผู้ปกครอง