【问题标题】:Which browser support REST completely. Means Get,Post,PUT and DELETE method?哪个浏览器完全支持 REST。是指 Get、Post、PUT 和 DELETE 方法吗?
【发布时间】:2012-01-09 07:42:44
【问题描述】:

哪个浏览器完全支持 REST? 是指Get、Post、PUT和DELETE方法吗?

我理解 Rails 理解 PUT 和 DELETE 的方式是像“_method”这样的隐藏变量

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

method="PUT"?

还是我想错了?

【问题讨论】:

  • 基本上,Web 浏览器只能在表单中使用 GET/POST,Rails 通过在 POST 请求中使用 PUT/DELETE 方法来处理它。 (见维尼的回答)。检查此以创建正确的表单:guides.rubyonrails.org/form_helpers.html

标签: ruby-on-rails rest


【解决方案1】:

在许多 REST 框架中,从浏览器调用 HTTP PUT 或 DELETE 操作可以通过所谓的“重载 POST”来实现。这意味着您将来自浏览器的请求作为 POST 请求提交到服务器,并在 URL 中附加一些信息,指定应使用的实际 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 请求,并带有一个魔术字段来告诉服务器如何处理该请求,这比 Web 应用程序更 RESTful总是使用带有魔法字段的 POST 请求来告诉服务器要做什么?后一种架构难道不是 REST 想要摆脱的主要事物吗?
  • 最好使用原生 PUT 或 DELETE - 如果可以的话。当您想从不支持这些 HTTP 操作的技术中调用 PUT 或 DELETE 操作时,重载 POST 就会发挥作用。 Flex 就是这样一种技术——它只支持 GET 和 POST。某些浏览器具有相同的限制。这些是使用重载 POST 而不是“正确”的 REST API 操作的例外情况。
  • 根据这篇文章:programmers.stackexchange.com/questions/114156/… HTML5、XHTML1 和 HTML4 标准中的表单中不包含 PUT 和 DELETE
【解决方案2】:

这个问题和这个问题差不多:Are the PUT, DELETE, HEAD, etc methods available in most web browsers?, 看到那里有一个很好的答案。

此外,“GET、POST、PUT 和 DELETE”不是“REST”。这四种都是 HTTP 规范中的不同方法,REST 是一种使用这四种的架构风格。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • “不要设计支持 PUT 或 DELETE 的 RESTful Web 服务”不是负责任的设计选择,也不应该成为任何开发 RESTful API 的人的选择。这些 HTTP 方法(PUT 和 DELETE)对于如何定义 RESTful Web 服务是不可或缺的,因此其他人可以弄清楚如何使用您的服务。 en.wikipedia.org/wiki/…
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 2020-04-11
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2011-10-01
    • 2015-01-25
    相关资源
    最近更新 更多