我有REST服务,应该通过GET接收很长的查询.比方说,我想查询具有许多地理坐标的服务,以找出有关所有这些坐标的信息.
1)我的第一个想法是使用长URI并增加 servlet容器的最大URI长度.
它看起来像这样:
GET http://some.test/myresource?query={really big JSON object}
但是由于旧的代理服务器,似乎长度超过2 KB的URI是不可靠的(是吗?).
2)我的解决方法是首先通过POST创建临时资源,并使用此资源的URI作为实际GET请求中的参数.这看起来像这样:
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请求的主体进行查询是一个好主意,并且共识是:不.甚至罗伊菲尔丁说这是一个坏主意.
4)另一种方法可以是将POST解释为"创建查询结果资源"并在请求后删除该资源.但我认为这不是RESTful而是一个坏主意.
有没有更好的方法来处理GET请求的大查询?