哪些浏览器完全支持REST,即支持GET、POST、PUT和DELETE方法?

4

哪些浏览器完全支持REST?即支持GET、POST、PUT和DELETE方法?

我了解Rails的方式是使用“_method”隐藏变量来理解PUT和DELETE。

  <form id="form_id" action="" method="PUT" >
   -- form content --
   </form>

method="PUT"是什么意思?

还是我的理解有误?


基本上,Web浏览器只能在表单中使用GET / POST方法,Rails通过在POST请求中隧道化PUT / DELETE方法来处理此问题(请参见Vinnie的答案)。 请查看以下链接以创建正确的表单:http://guides.rubyonrails.org/form_helpers.html - basgys
3个回答

9
在许多REST框架中,通过浏览器调用HTTP PUT或DELETE操作可以通过所谓的“重载POST”实现。这意味着您将请求作为带有一些信息附加到URL中的POST请求提交到服务器,指定应使用的实际HTTP方法。
我知道Java的Restlet框架遵循这种方法,我相信Rails也是如此。
因此,如果您定义了一个REST API如下:
- POST - http://myservice/myobject -> 创建新对象并返回对象ID - GET - http://myservice/myobject/id -> 返回对象 - PUT - http://myservice/myobject/id -> 更新对象 - DELETE - http://myservice/myobject/id -> 删除对象
在浏览器中使用Overloaded POST,您还可以:
- POST - http://myservice/myobject/id?method=PUT -> 更新对象 - POST - http://myservice/myobject/id?method=DELETE -> 删除对象
实际上,对于不支持PUT或DELETE的Flex,这是调用这些REST操作的唯一方式。

@Vinnie 既然Rails和Restlet只是将PUT和DELETE请求转换为带有魔术字段的POST请求,以告诉服务器如何处理请求,那么这与使用始终带有魔术字段的POST请求告诉服务器如何处理请求的Web应用程序相比,有什么更具RESTful性质呢?难道后者架构不正是REST所要摆脱的主要问题吗? - Jazz
最好使用本地的PUT或DELETE - 如果可以的话。当你想从不支持这些HTTP操作的技术中调用PUT或DELETE操作时,过载POST就会发挥作用。Flex是这样一种技术 - 它只支持GET和POST。一些浏览器也有同样的限制。这些都是例外情况,过载POST将被用来代替“正确”的REST API操作。 - Vinnie
根据这篇帖子:http://programmers.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms,在HTML5、XHTML1和HTML4标准中,PUT和DELETE方法没有包含在表单中。 - Ross Attrill

1

-4

PUT和DELETE只是规范,没有任何浏览器和Web服务器实现它们。

因此,如果您正在发送请求,请不要设计支持PUT或DELETE的RESTful Web服务。


1
不要设计支持PUT或DELETE的RESTful Web服务,这不是一个负责任的设计选择,也不应该成为任何开发RESTful API的选项。这些HTTP方法(PUT和DELETE)是定义RESTful Web服务的重要组成部分,以便其他人可以了解如何使用您的服务。http://en.wikipedia.org/wiki/Representational_state_transfer#RESTful_web_services - Vinnie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接