我们正在设计一个iPhone应用程序,它将回调在Tomcat中运行的RESTful服务。我们需要发送许多查询参数,并且已超过手机允许的最大值。
使用PUT调用与正文中的参数是否是RESTful,即使意图不修改服务器? POST似乎不正确,因为它不是幂等的,而PUT是(因此更接近于行为或GET)。
感谢。
答案 0 :(得分:6)
您有三个最符合HTTP的选项:
首先,您可以选择以某种方式发送压缩的params,以形成较短的URL。
其次,GET
没有任何内容表明您无法在请求中发送邮件正文,无论您选择何种Content-Type
或-Length
。并非所有服务器都支持此功能,但HTTP协议本身也支持此功能。
第三,您可以将参数发布到/queries/
资源,然后在201 Created
响应标头中使用/queries/78a65g82
和新网址(如Location
)进行回复然后客户端调用GET
(重复,甚至在Ranges
,如果这是一个好处),以检索结果。
答案 1 :(得分:4)
如果你想要它RESTful,你可以这样做:将参数输出到服务器(在你选择的位置),或者你可以POST它们并让服务器为你放置它们。无论哪种方式,您刚刚创建了一个包含所需参数的资源。然后你发送一个GET引用那个特定的资源。在回答您的GET时,服务器因此知道从哪里获取其大量参数。这将是RESTful。
然而,如果您可以通过单个请求执行相同的操作,那么发送两个请求效率不高。我只是尝试务实。
考虑一下:PUT告诉代理他们不应该缓存响应,但是重试(沿着线路的任何基础设施元素)绝对是可能的,因为它是幂等的(就像GET一样)。 GET通过PUT为您提供什么?响应可以缓存。但是有了大量的参数,我会认为大多数请求都是独一无二的,对吧?因此,缓存不会经常带来太多回报。因此,使用PUT似乎是务实的,因而也是正确的选择。
答案 2 :(得分:1)
它违反了REST的精神,但如果它有效,那就要务实。