RESTful Web服务和HTTP动词

14
作为一个RESTful的Web服务,服务器应该允许哪些最小集合的HTTP动词?
如果我的主机商不允许使用PUT和DELETE怎么办?
这真的很重要吗?我只用GET和POST也能过得开心吗?

更新:感谢大家的回答,Roger的回答可能是最好的,因为它链接到了Bill Venners和Elliotte Rusty Harold的采访。我现在明白了。


5个回答

22

是的,你可以不使用PUT和DELETE方法。

本文告诉你为什么:http://www.artima.com/lejava/articles/why_put_and_delete.html

虽然对于真正的RESTafrians来说,这可能是异端邪说,但在现实世界中,你需要尽力而为,充分利用你所拥有的一切。尽可能合理和一致地遵循自己的约定,你肯定可以构建一个良好的RESTful系统,而无需使用P和D。

rp


3
你可以使用 X-Http-Verb-Override:DELETE 替代 HTTP DELETE。这对于无法更改 HTTP 动词且仅支持 GET 和 POST 的 Silverlight 客户端也非常有用...

2
REST允许打破协议约定,如果协议的实现被破坏(这样你所做的唯一非标准的事情就是绕过实现中损坏的部分)。因此,在REST中,可以使用其他方法来表示通常不支持的动词,如DELETE或PUT。
编辑:以下是Fielding的一句话,他创建和定义了REST:
REST API不应包含任何更改通信协议的内容,除非填写或修复标准协议的未指定细节,例如HTTP的PATCH方法或Link header字段。对于损坏的实现的解决方法(例如那些愚蠢到认为HTML定义了HTTP方法集的浏览器),应单独定义,或至少在附录中定义,并期望解决方法最终会过时。[在这里失败意味着资源接口是特定于对象而不是通用的。]

从这个角度来看,所有的网络浏览器都是有问题的。但是谁说我们在说“REST客户端”时一定是指网络浏览器呢? - lutz
你没有理解我的观点。我甚至没有提到浏览器。但是无论如何,如果您的托管服务允许,仍应允许PUT和DELETE等正确用法,以及某种“损坏”客户端的解决方法。 - aehlke

2

如果你只是使用GET和POST方法,那么它仍然是符合RESTful标准的。你的Web服务可能只需要使用GET或POST方法来完成某些操作,这样也是可以的。


1

现今的网络浏览器只处理GET和POST请求。例如,在Rails中,PUT和DELETE请求是通过隐藏表单字段“伪造”的。

除非你的框架有一些解决方法来“支持”PUT和DELETE请求,否则现在不必担心它们。


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