使用*many*参数调用RESTful服务

Ral*_*lph 7 rest

我们正在设计一个iPhone应用程序,它将回调在Tomcat中运行的RESTful服务.我们需要发送许多查询参数,并且已超过手机允许的最大值.

将PUT调用与正文中的参数一起使用是否是RESTful,即使意图不修改服务器?POST似乎不正确,因为它不是幂等的,而PUT是(因此更接近于行为或GET).

谢谢.

fum*_*chu 6

您有三个最符合HTTP的选项:

首先,您可以选择以某种方式发送压缩的params以形成更短的URL.

其次,也没什么可说GET是说你不能在请求发送消息体,无论在Content-Type-Length您选择.并非所有服务器都支持此功能,但HTTP协议本身也是如此.

第三,您可以将参数发布到/queries/资源,并在响应头中响应201 Created并使用新的URL(如/queries/78a65g82),Location客户端然后调用GET(重复,甚至在Ranges,如果这是一个好处),以检索结果.

  • 我想你可能会发现一些代理不会转发GET请求的正文. (4认同)

jbr*_*del 4

如果您想要 RESTful,您可以这样做:将参数 PUT 到服务器(在您选择的位置),或者您可以 POST 它们并让服务器为您放置它们。无论哪种方式,您都刚刚创建了一个包含所需参数的资源。然后您发送一个引用该特定资源的 GET。因此,在响应您的 GET 时,服务器知道从哪里获取其大量参数。那将是宁静的。

但是,如果您可以使用单个请求执行相同的操作,那么发送两个请求的效率并不是很高。我只是尝试务实一些。

考虑一下:PUT 告诉代理它们不应该缓存响应,但重试(通过沿线的任何基础设施元素)绝对是可能的,因为它是幂等的(就像 GET 一样)。与 PUT 相比,GET 能给您带来什么?响应可以被缓存。但有了如此大量的参数,我会假设大多数请求无论如何都是唯一的,对吧?因此,缓存通常不会带来太多回报。因此,使用 PUT 似乎是务实的,因而是正确的选择。