假设我有一个RESTful api,包含团队和玩家,多对多的关系。
我可以通过以下方式获得特定团队的球员:
GET /api/team/{team_id}/players
我想制作更复杂的查询,但我不知道哪种是uri设计的最佳实践。
具体来说我想:
最佳方法是什么?
答案 0 :(得分:1)
如果球队和球员有多对多关系,我个人不会使用这种uri设计。如果一名球员可以为一支以上的球队效力,那么你最终将获得并非独一无二的球员uris。例如,假设一个特定的玩家同时为第5队和第6队比赛,他们可能会被以下的uris所代表(假设球队和球员都有数字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
也许其中第二个不那么含糊
答案 1 :(得分:0)
路由语法如
/api/team/{team_id}/players
总是需要定义team_id。
使用GET参数过滤此属性。