ลองนึกภาพคุณมีเอนทิตี้ 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'        
]
การปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้คืออะไร?