示例:
方法:GET
回复:collection
中与a search term
匹配的所有项目。
问题:搜索字词可能太长,以至于它破坏了Web服务器的最大值 网址长度。
如何允许极长的搜索字词并保持RESTful状态?
答案 0 :(得分:32)
为了获得灵感,我只看了Google Translate's API v2,“正在使用 RESTful调用样式。“
当然,要翻译的文本可能会很长。谷歌可选择
允许使用POST
发送请求,但有一个扭曲:
要使用
POST
,您必须使用X-HTTP-Method-Override
标题告诉您 翻译API以将请求视为GET
(使用X-HTTP-Method-Override: GET
)。
因此,可以语义将POST
请求转换为GET
请求。
(这个发现让我在我的问题中添加了x-http-method-override标签。)
答案 1 :(得分:2)
REST不会将POST限制为创建。注意将CRUD映射到HTTP方法并假设它是RESTful。 POST是用于任何未通过HTTP标准化的操作的方法。
由于标准没有为URI建立限制,因此可以认为这是一个破坏的实现,并且可以修复它。只要解决方法与您的API松散耦合,您仍然是RESTful。这意味着您的API不应直接实现转换或覆盖,而应在某种类型的预处理器上正确地重写请求。应该在某处明确记录这是由于实施中断,并且您预计它最终会过时。
答案 2 :(得分:0)
如果您的查询可能超过最大长度(浏览器事实上是2000个字符,但对于其他访问REST API的方式可能更高),这是一种难闻的气味。
如果用户可以传入那么多数据,则应该在请求正文/数据字段中,而不是在URL中。