违反REST规范以支持一致性

时间:2013-11-05 08:50:48

标签: rest

我正在尝试开发一个RESTful Web服务,该服务将用于用户,产品等实体。

创建我想要使用的新用户

[POST] site/user

正如REST规范所说

但是,我也想搜索用户。根据REST规范,

[GET] site/user?name=Shuaib&city=Dhaka

到目前为止一切顺利。但如果我想输入大型JSON数据作为搜索参数的一部分,该怎么办?如果我在那种情况下使用get - >我的网址看起来很笨拙 - >由于GET请求网址大小存在限制,因此大型JSON数据可能超过网址大小

由于这些问题,我想使用POST搜索用户。

[POST] site/user

这是一个很好的开发实践吗?

1 个答案:

答案 0 :(得分:1)

没有。这不是一个好的开发方法,特别是如果您关心使用您的API的其他开发人员。如果您可以使用URI参数进行搜索,那么开发人员可能会惊讶于他可以提交包含大量参数的巨大URI并且它仍然可以正常工作,但是在这方面没有任何不一致或障碍。

另一方面,如果你只是因为你不想要那些巨大的URI而通过POST制作标准化为GET的操作,那么你必须记录下来,开发人员必须熟悉你的决定,这将是一个理解的问题。

请记住,HTTP标准没有对URI大小设置任何限制,因此大小不应影响您的API设计决策。当然,几乎100%的客户端和服务器都以某种方式被破坏,并且对URI大小有一些限制。如果您实际达到了这个限制,那么解决问题的RESTful方法就是使用一些与您的服务松散耦合的解决方法,并将其明确记录为破坏实现的解决方法。例如,一个预处理器将带有X-HTTP-Method-Override: GET标头的POST请求重写为GET请求,就像Google Translate API所做的那样。