【发布时间】:2011-09-13 13:13:18
【问题描述】:
假设您有两个实体,Player 和 Team,玩家可以在多个团队中。在我的数据模型中,每个实体都有一个表,以及一个用于维护关系的连接表。 Hibernate 可以很好地处理这个问题,但是我如何在 RESTful API 中公开这种关系?
我可以想到几种方法。首先,我可能让每个实体都包含另一个实体的列表,因此 Player 对象将具有它所属的 Teams 列表,并且每个 Team 对象将具有属于它的 Player 列表。因此,要将玩家添加到团队中,您只需 POST 将玩家的表示形式发送到端点,例如 POST /player 或 POST /team,并将适当的对象作为请求的有效负载。这对我来说似乎是最“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。
/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'
]
这方面的最佳做法是什么?
【问题讨论】:
-
你能更新接受的答案吗,还有另一个答案加倍投票,现在你可能有更好的经验来判断接受的答案的优缺点。