Wyobraź sobie, że masz 2 podmioty, Gracza i Drużyny , w których gracze mogą należeć do wielu drużyn. W moim modelu danych mam tabelę dla każdej jednostki i tabelę łączenia, aby zachować relacje. Hibernacja radzi sobie z tym dobrze, ale jak mogę ujawnić ten związek w interfejsie API RESTful?
Mogę wymyślić kilka sposobów. Po pierwsze, każda jednostka może mieć listę drugiej, więc obiekt Gracza miałby listę Drużyn, do których należy, a każdy obiekt Drużyny miałby listę Graczy, które do niej należą. Aby dodać gracza do zespołu, wystarczy POST przedstawić reprezentację gracza do punktu końcowego, coś w rodzaju POST /player
lub POST /team
z odpowiednim obiektem jako ładunkiem żądania. Wydaje mi się to najbardziej „ODPOCZYNEK”, ale wydaje mi się trochę dziwne.
/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'
}
Innym sposobem, w jaki mogę to zrobić, byłoby ujawnienie relacji jako odrębnego zasobu. Aby zobaczyć listę wszystkich graczy w danym zespole, możesz zrobić GET /playerteam/team/{id}
lub coś w tym stylu i uzyskać listę podmiotów PlayerTeam. Aby dodać gracza do drużyny, POST /playerteam
z odpowiednio zbudowaną jednostką PlayerTeam jako ładunek.
/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'
]
Jaka jest najlepsza praktyka w tym zakresie?