2011-02-14 230 views
1

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

是否存在某个特定参数的名字吗? (就像POST请求中的request_method = DELETE那样,应该向服务器指出客户端真的想要DELETE但不能指出它)?还是没有这样的规格?在prototype.js中使用

searches lead me to the parameters “_method”。但是这个参数是一个标准吗? 例如,jQuery如何处理它?

感谢您的帮助。

+0

你是什么意思“不能”?你的意思是客户没有连接? – diagonalbatman 2011-02-14 16:58:37

+0

我更新了我的问题,是否更好? – 2011-02-14 17:04:12

回答

2

什么你基本上是问被称为方法重载 - 虽然它不是100%的REST风格,这是你可以回退到的情况下,客户端没有办法支持PUT/DELETE方法。理查森的/ Ruby的书RESTful Web Services也提到了这种方法。

你创造你自己的基本原则在你的问题 - 的差别时相比,完全基于REST的做法是,你介绍其提交的通过POST请求主体的一部分的新参数。此参数指示通过(超载)POST请求提交的预期方法(例如,POST/PUT/DELETE)。这可以让您克服客户端的HTTP方法限制,同时仍然保持您的URI设计清晰和RESTful(例如没有动词)。但是,您仍应该尽可能多地使用RESTful,即继续使用GET进行只读请求(从而不会影响缓存等),并对任何写入请求使用重载的文章。至于如何命名保存真正的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方法作为有效表单操作值已从HTML5 spec(这也在您提到的SO问题中提到)。

1

方法PUT /删除/ GET通常由与该请求所发送的HTTP标头determiend。虽然你应该坚持使用的方法,你可以做你想要的服务真正在你的服务与呼吁进来 - 然后你有点打破了RESTfull服务的想法:)

这是一个非常翔实的文章关于REST,应该帮助清除您的想法 - Understanding REST: Verbs, error codes, and authentication