【发布时间】:2011-01-05 11:14:34
【问题描述】:
我有 REST 服务,应该通过 GET 接收很长的查询。例如,我想查询具有 许多 个地理坐标的服务,以了解有关所有这些坐标的信息。
1) 我的第一个想法是使用长 URI 和 servlet 容器的 increase the max URI length。
看起来像这样:
GET http://some.test/myresource?query={really big JSON object}
但是,由于旧的代理服务器,超过 2 KB 的 URI 似乎不可靠(对吗?)。
2) 我的解决方法是先通过 POST 创建一个临时资源,然后在实际的 GET 请求中使用该资源的 URI 作为参数。看起来像这样:
POST http://some.test/temp
Request Body: {really big JSON object}
201 Created Location: http://some.test/temp/12309871
GET http://some.test/myresource?query=http://some.test/temp/12309871
3) 使用 GET 请求的正文。我已经阅读了使用 GET 请求的主体进行查询是否是个好主意的问题的答案,共识是:不。甚至 Roy Fielding 都说这是bad idea。
4) 另一种方法是将 POST 解释为“创建查询结果资源”并在请求后删除该资源。但我认为这不是 RESTful 并且是个坏主意。
有没有更好的方法来处理带有 GET 请求的大查询?
【问题讨论】:
-
是的,带有
PUT。请参阅我的答案以获得更深入的解释