当前位置:  开发笔记 > 前端 > 正文

PUT/DELETE是否是REST自动的幂等功能?

如何解决《PUT/DELETE是否是REST自动的幂等功能?》经验,为你挑选了2个好方法。

我正在学习REST和PUT/DELETE,我已经读过这两个(以及GET)是幂等的意思是多个请求使服务器进入相同的状态.

重复的PUT/DELETE请求是否会离开Web浏览器(使用时XMLHttpRequest)?换句话说,服务器是否会为每个PUT请求更新相同的数据库记录,还是会自动忽略重复的请求?

如果是,那么使用PUT或DELETE与使用POST有何不同?

我读了一篇文章,建议RESTful Web服务是前进的方向.HTML5表单不支持PUT/DELETE方法有什么特别的原因吗?



1> zzzzBov..:

REST只是数据访问和操作的设计结构.对于服务器必须如何响应数据请求,没有固定的规则.

话虽如此,通常是REST请求PUTDELETE将如下:

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的反正,所以对我来说,似乎大可不必.


REST不是官方规范,但它只是提醒我们不要使用新方法偏离HTTP或向事务添加状态.因此,像'DELETE/item/last`这样的请求不是幂等的,所以不应该使用它.例如,浏览器会再次发送请求,而不会在回击时要求用户确认.另外,`POST/item/last?action = delete`似乎是一个坏主意,你怎么能保证你删除你想要的资源?

2> Thomas Bonin..:

重复的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来解决此问题,然后处理该服务器端.


幂等不仅仅是一种约定 - 它是服务器对客户端(和中介)的承诺.但是,作为服务的实施者,您有责任履行(或打破)这一承诺.它不是强制执行的,而是中介(即代理人)根据该承诺做出假设,如果不是这样,则可能对您的服务或您的客户产生不良后果.与POST的唯一区别是POST对安全性或幂等性没有做出任何承诺,因此代理人不做任何假设.
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有