假设您有2个实体,Player和Team,其中玩家可以在多个团队中。在我的数据模型中,我为每个实体都有一个表,以及一个用于维护关系的联接表。Hibernate很擅长处理此问题,但是如何在RESTful API中公开这种关系?
我可以想到几种方法。首先,我可能让每个实体包含另一个实体的列表,因此Player对象将具有其所属的团队的列表,并且每个Team对象将具有一个属于其的Player的列表。因此,要将玩家添加到团队中,您只需将玩家的表示发布到端点,例如POST /player
或/team
带有适当对象作为请求负载的POST 。对我来说,这似乎是最“ RESTful”的,但感觉有点奇怪。
/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实体的列表。要将玩家添加到团队中,请/playerteam
使用适当构建的PlayerTeam实体作为有效载荷进行POST 。
/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'
]
最佳做法是什么?