2

我认为 RESTful 搜索的标准方法是:

GET /users?parameter1=value1&parameter2=value2&parameter3=value3&parameter4=value4

但我想做这样的事情:

GET /users
# Request body:
{
    "parameter1": "value1",
    "parameter2": "value2",
    "parameter3": "value3",
    "parameter4": "value4"
}

更新:我不能以上述方式使用 GET,因为某些设备不尊重 GET 请求的正文内容。所以我不得不改用 POST 。

RESTful 宗教信仰是我不应该使用 POST 将 JSON 数据发送到/api/search端点而不是使用 URI 的唯一原因吗?

以这种方式使用 POST 是否存在任何技术和明显的危险?

我知道这类似于以下内容:

如何设计 RESTful 搜索/过滤?

但我要问一些更具体的问题:即,除了“它不符合惯例”之外,这将是一种不好的方法的一些原因是什么。

4

1 回答 1

6

您可以使用 POST 来执行此操作。HTTP 规范并没有禁止它。

通过使用 GET,您可以更准确地表示请求的特征。如果您使用 POST,即使您是,中介也无法判断您正在执行安全、幂等的请求。这可能会限制您从某些中介机构获得的好处。您将无法通过使用 POST 来利用缓存的响应。

如果你觉得这些好处的损失并没有超过你看到的拥有更干净的 URI 的好处,那么继续使用 POST。

我建议您不要养成无缘无故地使用 POST 而不是 GET 的习惯,但是如果发送正文很有用,那就去做吧。

还要意识到,如果 6 个月后,您真的希望可以缓存对搜索的响应,那么您始终可以将服务器响应更改为重定向,其中客户端使用 GET 重定向,该 GET 具有在位置 URI 中编码的参数然后您可以利用缓存的结果。

重要的是你绝不能使用传达不真实语义的 Http 方法。即永远不要使用 GET 来做不安全的事情。永远不要使用 PUT 来做一些非幂等的事情。但是,POST 无论如何都不会限制请求,因此您始终可以使用 POST。请注意,中介不能为 POST 提供太多帮助。

于 2013-06-18T21:44:40.733 回答