0

所以我正在使用 Laravel 4 PHP 框架构建一个 RESTful(尽可能 RESTful)API。现在我有几十个 API 调用在工作,我有一个过程来做限制、排序和做简单的过滤。以下是其中一个调用的示例:

/api/v1/users?limit=10&offset=10&firstName=John&order[]=createdTimestamp desc

这将返回第 11 到第 20 个用户,其名字为 John,按 createdTimestamp 降序排列。这里的简单过滤只能进行完全匹配(=)。现在,我还希望能够通过 REST API 提供更复杂的过滤系统,该系统支持指定相等匹配类型的能力,他们可以执行 != 或 > 或 LIKE 等...问题是我不知道我是否能够通过普通查询字符串提供这种类型的过滤。

通过 REST API 提供这种复杂过滤的最佳方式是什么?即使它不是“真正的” RESTful,通过 POST 仍然被认为是最好的方式(即使这可以防止用户尝试运行超过某些浏览器具有的 URI 字符长度限制的长查询的问题)?

4

2 回答 2

1

@ryanzec

现在,我还希望能够通过 REST API 提供更复杂的过滤系统,该系统支持指定相等匹配类型的能力,他们可以执行 != 或 > 或 LIKE 等...问题是我不知道我是否能够通过普通查询字符串提供这种类型的过滤。

简单的查询字符串是不可能的(好吧,也许有可能,但很难在查询字符串中正确编码这样的逻辑)。您需要定义自定义查询格式并使用 POST 提交此类查询。服务器可能会回复:

  • “201 Created”状态和“Location”标头字段指示查询资源(如果之前没有此类查询);或者
  • “303 See Other”和“Location”标头字段指示已经存在的查询资源。

通过 POST 进行仍然被认为是最好的方式,即使它不是“真正的”RESTful

我不知道这是谁说的,但这是错误的。将 POST 用于此类目的并没有错。

于 2013-02-21T00:25:34.163 回答
0

在您的集合资源响应中使用表单来告诉客户如何搜索集合。有关示例,请参阅我对 REST 和复杂搜索查询的回答。

于 2013-02-21T00:44:55.447 回答