例子:
方法:
GET
响应:
collection
匹配中的所有项目a search term
。
问题:搜索词可能太长,以至于超出了 Web 服务器的最大 URL 长度。
如何允许极长的搜索词并仍然保持 RESTful?
例子:
方法:GET
响应:collection
匹配中的所有项目a search term
。
问题:搜索词可能太长,以至于超出了 Web 服务器的最大 URL 长度。
如何允许极长的搜索词并仍然保持 RESTful?
为了获得灵感,我刚刚查看了Google Translate 的 API v2,它是“使用 RESTful 调用风格”。
自然,要翻译的文本可能会很长。因此,谷歌可以选择允许发送一个带有 的请求POST
,但有一个转折点:
要使用
POST
,您必须使用X-HTTP-Method-Override
标头告诉翻译 API 将请求视为GET
(使用X-HTTP-Method-Override: GET
)。
因此可以在语义上将POST
请求转换为GET
请求。
(这一发现使我将x-http-method-override标记添加到我的问题中。)
REST 不将 POST 限制为创建。小心将 CRUD 映射到 HTTP 方法并假设它是 RESTful。POST 是用于 HTTP 未标准化的任何操作的方法。
由于该标准没有对 URI 进行限制,因此可以认为这是一个损坏的实现,可以修复它。只要解决方法与您的 API 松散耦合,您仍然是 RESTful。这意味着您的 API 不应该直接实现翻译或覆盖,而是在某种类型的预处理器上正确地重写请求。应该在某处清楚地记录这是由于实施中断造成的,并且您希望它最终会过时。
如果您的查询可能太长以至于超过最大长度(事实上浏览器为 2000 个字符,但其他访问 REST API 的方式可能更高),这是一种不好的气味。
如果用户可以传入这么多数据,它应该进入请求正文/数据字段,而不是 URL。