351 Stimmen

Wie kann ich Many-to-many-Beziehungen in einer RESTful-API behandeln?

Stellen Sie sich vor, Sie haben zwei Entitäten, Spieler y Team , bei dem die Spieler in mehreren Teams spielen können. In meinem Datenmodell habe ich eine Tabelle für jede Entität und eine Verknüpfungstabelle zur Pflege der Beziehungen. Winterschlaf kann dies gut handhaben, aber wie kann ich diese Beziehung in einer RESTful API?

Ich kann mir mehrere Möglichkeiten vorstellen. Erstens könnte jede Entität eine Liste der anderen enthalten, so dass ein Spieler-Objekt eine Liste der Mannschaften hätte, zu denen es gehört, und jedes Mannschafts-Objekt hätte eine Liste der Spieler, die zu ihm gehören. Um also einen Spieler zu einer Mannschaft hinzuzufügen, müsste man nur POST die Darstellung des Spielers an einen Endpunkt, z. B. POST /player oder POST /team mit dem entsprechenden Objekt als Nutzlast der Anfrage. Dies scheint mir die "RESTful", aber fühlt sich ein wenig seltsam.

/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'
}

Die andere Möglichkeit, die mir dazu einfällt, wäre, die Beziehung als eigenständige Ressource auszuweisen. Um also eine Liste aller Spieler einer bestimmten Mannschaft zu sehen, könnte man einen GET /playerteam/team/{id} oder etwas Ähnliches und erhalten eine Liste der PlayerTeam-Entitäten zurück. Um einen Spieler zu einem Team hinzuzufügen, POST /playerteam mit einer entsprechend erstellten PlayerTeam-Entität als Nutzlast.

/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'
]

Was ist das beste Verfahren dafür?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X