假设我有一个带有团队和玩家的 RESTful api,多对多关系。
我可以通过以下方式获得特定球队的球员:
GET /api/team/{team_id}/players
我想做一些更复杂的查询,但我不知道哪个是 uri 设计的最佳实践。
具体来说,我想:
- 获取不属于任何团队的玩家。
- 获取不属于特定团队的球员。
最好的方法是什么?
假设我有一个带有团队和玩家的 RESTful api,多对多关系。
我可以通过以下方式获得特定球队的球员:
GET /api/team/{team_id}/players
我想做一些更复杂的查询,但我不知道哪个是 uri 设计的最佳实践。
具体来说,我想:
最好的方法是什么?
如果球队和球员有多对多的关系,我个人不会使用这种 uri 设计。如果一名球员可以为多支球队效力,那么你最终会得到不是唯一的球员 uri。例如,假设某个特定球员同时为第 5 队和第 6 队效力,他们可能由以下两个 uri 表示(假设球队和球员都有数字 id)
/api/team/5/players/4
/api/team/6/players/4
相反,我会稍微移动一下,你可以用这个 uri 代表玩家:
/api/players/4
每个团队都有这些 uris(为了一致性而复数)
/api/teams/5
/api/teams/6
然后你可以像这样搜索团队成员
/api/players?team=5
NOT IN 查询可以解释,但您可以使用类似于 django 模型过滤器的工作方式并沿这些行引入后缀查询参数:
/api/players?team_ne=5
对于不属于任何球队的球员,你有几个选择
/api/players?team=
/api/players?team=none
也许其中的第二个不那么模棱两可
路由语法如
/api/team/{team_id}/players
始终需要定义的 team_id。
使用 GET 参数来过滤这个属性。