假设你有两个实体,球员和团队,玩家可以在多个队伍中。在我的数据模型中,每个实体都有一个表,还有一个连接表来维护这些关系。Hibernate很好地处理了这个问题,但是我如何在宁静的 API中公开这个关系呢?
我能想到几种方法。首先,我可能让每个实体都包含另一个实体的列表,所以一个Player对象将有一个它所属的Teams列表,而每个Team对象将有一个属于它的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'
]
对此的最佳实践是什么?