【问题标题】:What alternative is advised when a client can't make a PUT/DELETE request?当客户端无法发出 PUT/DELETE 请求时,建议有什么替代方案?
【发布时间】:2011-02-14 16:54:28
【问题描述】:

我正在寻求实现一个 RESTful API,我想知道当浏览器客户端无法对服务器执行 PUT/DELETE 请求时建议使用什么参数。 (自some browser apparently doesn't support these requests

是否存在特定的参数名称? (类似于 POST 请求上的 request_method=DELETE ,应该向服务器表明客户端确实想要 DELETE 但不能表明它)?还是没有这样的规范?

我的searches lead me to the parametersprototype.js 使用的“_method”。但是这个参数是一个标准吗? 比如jQuery是如何处理的?

感谢您的帮助。

【问题讨论】:

  • “不能”是什么意思?你的意思是客户端没有连接?
  • 我更新了我的问题,是不是更好?
  • 您引用的帖子有点误导,GET、POST、PUT 和 DELETE 是浏览器的基本元素,所有 4 种方法都支持,但可能是最过时/最晦涩的方法.所以我下面的信息仍然存在:)

标签: rest parameters


【解决方案1】:

您实质上要问的是方法重载 - 虽然它不是 100% RESTful,但如果客户端不支持 PUT/DELETE 方法,您可以回退到这种方法。 Richardson/Ruby 的书 RESTful Web Services 也提到了这种方法。

您自己在问题中提出了基本原则 - 与完全 RESTful 方法相比,您引入了一个新参数,该参数作为请求正文的一部分通过 POST 提交。此参数指示通过(重载)POST 请求提交的预期方法(例如 POST/PUT/DELETE)。这允许您克服客户端的 HTTP 方法限制,同时仍然保持您的 URI 设计干净和 RESTful(例如,没有动词)。但是,您仍然应该尽可能多地使用 RESTful,即继续对只读请求使用 GET(因此不会影响缓存等),并对任何写入请求使用重载 post。至于如何命名包含真正 HTTP 方法的参数 - 我自己不知道有任何标准化的命名策略,所以使用 Prototype.js 使用的(或任何适合您的命名策略的名称)应该是很好。

关于 jQuery 和 XmlHttpRequest,一般来说,它们应该支持 PUT 和 DELETE 方法。见:

请注意,jQuery 文档警告说对 PUT/DELETE 的支持依赖于浏览器。我的理解是,在使用 XHR 时应该支持这些方法……但是,在决定 POST 重载还是完整的 HTTP 方法堆栈之前,您应该测试是否所有目标浏览器都支持这些方法。

jQuery 默认提供对.get().post() 方法的访问,这两个方法都建立在.ajax() 之上。要通过 jQuery 进行 PUT/DELETE 调用,您需要直接使用 .ajax() 方法并在设置中指定 type 中的方法。然而,这是一个真正的 PUT/DELETE 请求,因为 jQuery 本身不提供任何自动方法来处理方法重载(因此您需要自己编写代码以使其适合您的 API 设计)。

如果您不使用 XHR 并且需要依赖标准表单,那么恐怕您将不得不使用方法重载,因为对 PUT/DELETE 方法作为有效表单操作值的支持已从 @ 中删除987654324@(在您所指的 SO 问题中也提到了这一点)。

【讨论】:

  • 非常好的答案。您确实在第一部分回答了我,我正在寻找一个标准化的命名策略,但显然没有,所以我将使用 Prototype.js 使用的那个。感谢您的回复!
【解决方案2】:

PUT/DELETE/GET 方法通常由随请求发送的 HTTP 标头确定。虽然您应该坚持使用方法,但您可以通过传入的调用在您的服务中做您真正想做的事情 - 但是您有点打破了 RESTfull 服务的想法:)

这是一篇关于 REST 的内容非常丰富的帖子,可以帮助您理清思路 - Understanding REST: Verbs, error codes, and authentication

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2021-12-02
    • 2012-12-28
    • 1970-01-01
    • 2013-02-18
    • 2016-01-10
    • 1970-01-01
    • 2013-02-03
    • 2020-12-09
    相关资源
    最近更新 更多