在通过API端点搜索时不使用POST的原因?

时间:2013-06-18 19:43:56

标签: asp.net json rest asp.net-web-api

我认为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是否有任何技术上和可证明的危险?

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

How to design RESTful search/filtering?

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

1 个答案:

答案 0 :(得分:6)

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

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

如果你认为失去这些好处并不会超过你看到的更清晰的URI的好处,那么请继续使用POST。

我建议您不要习惯在GET上使用POST而没有正当理由,但是在发送正文时很有用,那就去做吧。

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

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