1

如果一个 REST API 端点得到所有,那么过滤器就很容易了。缺少过滤器意味着“获得所有结果”。

GET /persons - gets all persons
GET /persons?name=john - gets all persons with name of "john"

但是如果有默认值,那么我需要一些方法来明确设置默认过滤器。继续上面的例子,如果每个人都有一个state,“已批准”或“待定”,并且如果我的系统设置为如果我没有明确指定状态,它将返回所有“已批准”:

GET /persons - gets all approved persons, because defaults to state=approved
GET /persons?state=approved - same thing, gets all approved persons
GET /persons?state=pending - gets all pending persons

我如何获得所有人?如果有 10 个可能的状态怎么办?还是100?

我可以想到几个方法:

  • GET /persons?state=any- 但是我永远无法使用实际状态any
  • GET /persons?state=*- 会工作,但感觉很奇怪?或者是吗?
  • GET /persons?state=- 一些 URL 解析库会抱怨一个空白的查询参数,这是否意味着“状态为空”而不是“状态是什么”?

我如何在我的 GET 中说“将状态的默认值覆盖为任何内容”?

4

2 回答 2

1

也许这对你有用:

  • GET /persons?state- 获取所有有state名字的人,不管是哪个值

  • GET /persons?state=state- 获取名称为空值的所有人员

您可能不需要区分这两种情况,因此您可以使用其中任何一种来获取所有有state名字的人(我只是认为没有的变体=更漂亮)。

FWIW,application/x-www-form-urlencoded格式(即,通常用于 HTML 表单)在空值和无值之间没有区别。

就 URI 标准而言,查询组件中的这种名称-值对语法无论如何只是一种约定,因此您可以使用任何您想要的语法/语义。

于 2014-12-24T10:03:52.910 回答
0

我认为这个问题没有一个答案。只要您记录默认状态已得到很好的批准,我认为您是否通过等对客户来说并不重要any*除了最后一个之外,您的所有提案都很好。我不认为这是一个好的。

如果我正在设计 API,我会使用all并将其作为标准。我还建议对返回元素列表的所有端点使用分页。我使用offsetandlimit作为分页查询参数。在我的 API 中,如果客户端没有指定另一个分页条件,我会默认返回 20 个元素。

于 2014-12-23T20:43:27.373 回答