如果一个 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 中说“将状态的默认值覆盖为任何内容”?