无法为GET编码REST请求(URL太长)

时间:2013-11-04 15:24:51

标签: api rest search http-headers x-http-method-override

示例:

问题:搜索字词可能太长,以至于它破坏了Web服务器的最大值 网址长度。

如何允许极长的搜索字词并保持RESTful状态?

3 个答案:

答案 0 :(得分:32)

为了获得灵感,我只看了Google Translate's API v2“正在使用 RESTful调用样式。“

当然,要翻译的文本可能会很长。谷歌可选择 允许使用POST发送请求,但有一个扭曲:

  

要使用POST,您必须使用X-HTTP-Method-Override标题告诉您   翻译API以将请求视为GET(使用X-HTTP-Method-Override: GET)。

因此,可以语义POST请求转换为GET请求。

(这个发现让我在我的问题中添加了标签。)

答案 1 :(得分:2)

REST不会将POST限制为创建。注意将CRUD映射到HTTP方法并假设它是RESTful。 POST是用于任何未通过HTTP标准化的操作的方法。

由于标准没有为URI建立限制,因此可以认为这是一个破坏的实现,并且可以修复它。只要解决方法与您的API松散耦合,您仍然是RESTful。这意味着您的API不应直接实现转换或覆盖,而应在某种类型的预处理器上正确地重写请求。应该在某处明确记录这是由于实施中断,并且您预计它最终会过时。

答案 2 :(得分:0)

如果您的查询可能超过最大长度(浏览器事实上是2000个字符,但对于其他访问REST API的方式可能更高),这是一种难闻的气味。

如果用户可以传入那么多数据,则应该在请求正文/数据字段中,而不是在URL中。