ลองนึกภาพคุณมีเอนทิตี้ 2 แบบคือผู้เล่นและทีมซึ่งผู้เล่นสามารถอยู่ในหลาย ๆ ทีม ในแบบจำลองข้อมูลของฉันฉันมีตารางสำหรับแต่ละเอนทิตีและตารางเข้าร่วมเพื่อรักษาความสัมพันธ์ การจำศีลทำได้ดีในการจัดการสิ่งนี้ แต่ฉันจะเปิดเผยความสัมพันธ์นี้ใน RESTful API ได้อย่างไร
ฉันสามารถคิดได้หลายวิธี ก่อนอื่นฉันอาจให้เอนทิตีแต่ละรายการมีรายการอื่น ๆ ดังนั้นวัตถุ Player จะมีรายชื่อทีมเป็นของมันและวัตถุแต่ละทีมจะมีรายชื่อผู้เล่นที่เป็นของมัน ดังนั้นในการเพิ่มผู้เล่นในทีมคุณเพียงแค่โพสต์การเป็นตัวแทนของผู้เล่นไปยังจุดสิ้นสุดบางอย่างเช่น POST /player
หรือ POST ที่/team
มีวัตถุที่เหมาะสมเป็นภาระของคำขอ ดูเหมือนว่า "สงบ" ที่สุดสำหรับฉัน แต่รู้สึกแปลก ๆ เล็กน้อย
/api/team/0:
{
name: 'Boston Celtics',
logo: '/img/Celtics.png',
players: [
'/api/player/20',
'/api/player/5',
'/api/player/34'
]
}
/api/player/20:
{
pk: 20,
name: 'Ray Allen',
birth: '1975-07-20T02:00:00Z',
team: '/api/team/0'
}
วิธีอื่นที่ฉันสามารถคิดได้ในการทำเช่นนี้คือการเปิดเผยความสัมพันธ์ในฐานะทรัพยากรในสิทธิ์ของตนเอง ดังนั้นเมื่อต้องการดูรายชื่อผู้เล่นทั้งหมดในทีมที่กำหนดคุณอาจทำ GET /playerteam/team/{id}
หรืออะไรทำนองนั้นและกลับรายการของเอนทิตี PlayerTeam หากต้องการเพิ่มผู้เล่นในทีมให้ POST /playerteam
พร้อมเอนทิตี PlayerTeam ที่สร้างขึ้นอย่างเหมาะสมเป็นส่วนของข้อมูล
/api/team/0:
{
name: 'Boston Celtics',
logo: '/img/Celtics.png'
}
/api/player/20:
{
pk: 20,
name: 'Ray Allen',
birth: '1975-07-20T02:00:00Z',
team: '/api/team/0'
}
/api/player/team/0/:
[
'/api/player/20',
'/api/player/5',
'/api/player/34'
]
การปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้คืออะไร?