我正在学习REST和PUT/DELETE,我已经读过这两个(以及GET)是幂等的意思是多个请求使服务器进入相同的状态.
重复的PUT/DELETE请求是否会离开Web浏览器(使用时XMLHttpRequest
)?换句话说,服务器是否会为每个PUT请求更新相同的数据库记录,还是会自动忽略重复的请求?
如果是,那么使用PUT或DELETE与使用POST有何不同?
我读了一篇文章,建议RESTful Web服务是前进的方向.HTML5表单不支持PUT/DELETE方法有什么特别的原因吗?
REST只是数据访问和操作的设计结构.对于服务器必须如何响应数据请求,没有固定的规则.
话虽如此,通常是REST请求PUT
或DELETE
将如下:
DELETE /item/10293
要么
PUT /item/23848 foo=bar fizz=buzz herp=derp
给出的请求与特定ID相关联.因此,告诉服务器删除相同的ID 15次将最终得到与调用一次相同的结果,除非进行某种重新编号.
通过该PUT
请求,告诉服务器将特定项更新为特定值也将导致相同的结果.
命令是非幂等的情况通常会涉及某种相对值:
DELETE /item/last
调用15次可能会删除15个项目,而不是相同的最后一项.正确使用HTTP的替代方案可能如下所示:
POST /item/last?action=delete
同样,REST不是官方规范,它只是一个具有一些共同特征的结构.有许多方法可以实现RESTful结构.
至于HTML5表单支持PUT
&DELETE
,它确实取决于浏览器开始支持不同的方法而不是规范本身.如果所有浏览器都开始实现表单提交的不同方法,我相信它们会被添加到规范中.
随着Web打算事情是这样的,一个好的RESTful的实现是容易也包含某种形式的AJAX的反正,所以对我来说,似乎大可不必.
重复的PUT/DELETE请求是否会离开Web浏览器(使用XMLHttpRequest时)?
当然可以.幂等性只是一种惯例,并没有强制执行.如果您提出请求,重复或不重复,它将会运行.
换句话说,服务器是否会为每个PUT请求更新相同的数据库记录,还是会自动忽略重复的请求?
如果它符合REST,它应该两次更新相同的数据库记录,例如运行UPDATE user SET name = 'John'
两次.但是不能保证它会做什么或不会做什么,这取决于它是如何实现的.
如果是,那么使用PUT或DELETE与使用POST有何不同?
这只是一个惯例.PUT和DELETE请求可能会或可能不会与站点代码中的POST处理不同.
我读了一篇文章,建议RESTful Web服务是前进的方向.HTML5表单不支持PUT/DELETE方法有什么特别的原因吗?
说实话,我不太确定.您可以通过使用名为
_method
或类似的隐藏字段并将其设置为DELETE或PUT来解决此问题,然后处理该服务器端.