Imagine que você tem 2 entidades, Jogador e Equipe , onde os jogadores podem estar em várias equipes. No meu modelo de dados, tenho uma tabela para cada entidade e uma tabela de junção para manter os relacionamentos. O Hibernate é bom em lidar com isso, mas como posso expor esse relacionamento em uma API RESTful?
Eu posso pensar em algumas maneiras. Primeiro, posso fazer com que cada entidade contenha uma lista da outra, para que um objeto Player tenha uma lista de equipes às quais pertence e cada objeto Team tenha uma lista de jogadores que pertencem a ela. Então, para adicionar um jogador a uma equipe, você apenas colocaria a representação do jogador em um endpoint, algo como POST /player
ou POST /team
com o objeto apropriado como a carga útil da solicitação. Isso parece o mais "RESTful" para mim, mas parece um pouco estranho.
/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'
}
A outra maneira que posso pensar em fazer isso seria expor o relacionamento como um recurso por si só. Portanto, para ver uma lista de todos os jogadores de um determinado time, você pode fazer um GET /playerteam/team/{id}
ou algo assim e recuperar uma lista de entidades do PlayerTeam. Para adicionar um jogador a uma equipe, POST /playerteam
com uma entidade PlayerTeam criada adequadamente como a carga útil.
/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'
]
Qual é a melhor prática para isso?