【发布时间】:2013-11-15 06:24:26
【问题描述】:
例子:
方法:
GET响应:
collection中的所有项目与a search term匹配。
问题:搜索词可能太长,以至于超出了网络服务器的最大值 网址长度。
我如何允许极长的搜索字词仍然保持 RESTful?
【问题讨论】:
标签: api rest search http-headers x-http-method-override
例子:
方法:GET
响应:collection 中的所有项目与 a search term 匹配。
问题:搜索词可能太长,以至于超出了网络服务器的最大值 网址长度。
我如何允许极长的搜索字词仍然保持 RESTful?
【问题讨论】:
标签: api rest search http-headers x-http-method-override
为了灵感,我只看了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 标签。)
【讨论】:
REST 不将 POST 限制为创建。小心将 CRUD 映射到 HTTP 方法并假设它是 RESTful。 POST 是用于任何未由 HTTP 标准化的操作的方法。
由于标准没有对 URI 建立限制,这可以被认为是一个错误的实现,可以修复它。只要解决方法与您的 API 松散耦合,您仍然是 RESTful。这意味着您的 API 不应该直接实现翻译或覆盖,而是在某种类型的预处理器上正确地重写请求。应该在某处清楚地记录这是由于实施中断造成的,并且您希望它最终会过时。
【讨论】:
X-HTTP-Method-Override: GET 看起来是定义异常(解决方法)并记录它的好方法。
如果您的查询过长以至于超过最大长度(实际上浏览器为 2000 个字符,但其他访问 REST API 的方式可能更高),这将是一种不好的感觉。
如果用户可以传入这么多数据,则应该在请求正文/数据字段中,而不是在 URL 中。
【讨论】:
POST,并且根据REST 原则POST 用于在集合中创建条目。还是我错过了什么?