24

例子:

问题:搜索词可能太长,以至于超出了 Web 服务器的最大 URL 长度。

如何允许极长的搜索词并仍然保持 RESTful?

4

3 回答 3

40

为了获得灵感,我刚刚查看了Google Translate 的 API v2,它是“使用 RESTful 调用风格”。

自然,要翻译的文本可能会很长。因此,谷歌可以选择允许发送一个带有 的请求POST,但有一个转折点:

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

因此可以在语义上将POST请求转换为GET请求。

(这一发现使我将标记添加到我的问题中。)

于 2013-11-04T16:15:00.973 回答
2

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

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

于 2013-11-04T23:35:16.460 回答
0

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

如果用户可以传入这么多数据,它应该进入请求正文/数据字段,而不是 URL。

于 2013-11-04T15:28:13.817 回答