假设你有两个实体,玩家和团队,玩家可以在多个团队中。在我的数据模型中,每个实体都有一个表,还有一个连接表来维护这些关系。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实体的列表。要将一名球员添加到球队,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'
]
对此的最佳实践是什么?