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

例:

  • 网址:http://example.com/collection/a%20search%20term

  • 方法: GET

  • 响应: collection所有项目与a search term匹配。

  • 问题:搜索项可能会很长,以至于打乱了Web服务器的最大URL长度。

    我如何允许极长的搜索条件并保持RESTful?


    为了获得灵感,我只看了谷歌翻译的API v2,它是“使用REST风格的调用风格”。

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

    要使用POST ,必须使用X-HTTP-Method-Override头来告诉Translate 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中。

    链接地址: http://www.djcxy.com/p/12353.html

    上一篇: REST request cannot be encoded for GET (URL too long)

    下一篇: Maximum on http header values?