REST:如何管理“不在”查询

时间:2013-03-07 20:02:22

标签: rest

假设我有一个RESTful api,包含团队和玩家,多对多的关系。

我可以通过以下方式获得特定团队的球员:

GET /api/team/{team_id}/players

我想制作更复杂的查询,但我不知道哪种是uri设计的最佳实践。

具体来说我想:

  1. 获取不属于任何团队的玩家。
  2. 获取不属于特定团队的玩家。
  3. 最佳方法是什么?

2 个答案:

答案 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参数过滤此属性。