我们正在设计一个iPhone应用程序,该应用程序将回调到Tomcat中运行的RESTful服务。我们需要发送很多查询参数,并超过了手机允许的最大值。使用* many *参数调用RESTful服务
即使在不修改服务器的意图,是否使用与正文中的参数PUT调用RESTful? POST似乎不正确,因为它不是幂等的,而PUT是(因此更类似于GET的行为)。
谢谢。
我们正在设计一个iPhone应用程序,该应用程序将回调到Tomcat中运行的RESTful服务。我们需要发送很多查询参数,并超过了手机允许的最大值。使用* many *参数调用RESTful服务
即使在不修改服务器的意图,是否使用与正文中的参数PUT调用RESTful? POST似乎不正确,因为它不是幂等的,而PUT是(因此更类似于GET的行为)。
谢谢。
如果你想要它RESTful,你可以这样做:将参数传递给服务器(在你选择的位置),或者你可以发布它们并让服务器为你放置它们。无论哪种方式,您已经创建了一个可以保存所需参数的资源。然后你发送一个指向那个特定资源的GET。因此,在回答您的GET时,服务器知道从哪里获得大量参数。这将是RESTful。
也就是说,发送两个请求不是很有效率,如果你可以用一个请求做同样的事情。我只是想尽量务实。
考虑一下:PUT告诉代理他们不应该缓存响应,但是重试(通过线上的任何基础设施元素)肯定是可能的,因为它是幂等的(就像GET一样)。 GET通过PUT提供了什么?响应可以被缓存。但是有了这么多的参数,我认为无论如何大多数请求都是唯一的,对吧?因此,缓存不会经常带来很多报酬。因此,使用PUT似乎是务实的,因此是正确的选择。
正如我在之前的评论中所说的,我们有很多参数的原因是每个参数都是iPhone上已有记录的ID。我们正试图阻止重新刷新这些记录。您关于不缓存和唯一性的评论是apropos。 – Ralph 2010-10-04 11:45:32
它违反了REST的精神,但如果它有效,就要务实。
有没有RESTful的方法来做到这一点?我不是法律信函(或本案中的规范)的坚守者,但是如果有任何方法,我想遵循标准。 – Ralph 2010-10-01 17:55:23
您必须最大程度地符合性与HTTP三种选择:
首先,你必须发送您的PARAMS以某种方式压缩,形成一个较短的URL的选项。
二,也没什么可说GET
,说你不能在请求发送消息体,在任何Content-Type
或-Length
您选择。并非所有的服务器都支持这一点,但HTTP协议本身就是如此。
第三,你可以发布参数到/queries/
资源,并与201 Created
作出回应,并在Location
响应头一个新的URL(如/queries/78a65g82
),其中客户端然后(反复,甚至Ranges
调用GET
,如果这是一个好处)来检索结果。
我想你可能会发现一些代理不会转发GET请求的主体。 – 2010-10-01 19:33:45
像Darrel一样,你不应该传递GET消息 - 有效载荷,它可以在你的dev-setup中工作,但可以在你的prod-setup中崩溃。这太不可靠了,路由(以及涉及的代理)通常不在您的控制之下。 – 2010-10-02 15:34:47
对于/ queries/78a65g82建议+1,这是我们使用的。 – balupton 2010-10-03 12:27:13
它是JSON还是XML? – Aliostad 2010-10-01 17:47:08
@Mark:非常好。如果你不能遵循法律的精神,就停止发展!为什么我没有想到这个?我现在正在给我的老板打电话,告诉他这个疯狂的数据模型不适合Chen所说的原始关系模型,我们应该停止工作。优秀! – 2010-10-01 17:52:22