石岩做网站的公司,成都微信小程序制作公司,网站建设维护内容,怎么样看网站用什么程序做的有的观点认为#xff0c;应该用POST来创建一个资源#xff0c;用PUT来更新一个资源#xff1b;有的观点认为#xff0c;应该用PUT来创建一个资源#xff0c;用POST来更新一个资源#xff1b;还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一个资源。这些观点都… 有的观点认为应该用POST来创建一个资源用PUT来更新一个资源有的观点认为应该用PUT来创建一个资源用POST来更新一个资源还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一个资源。这些观点都只看到了风格争论起来也只是争论哪种风格更好其实用PUT还是POST不是看这是创建还是更新资源的动作这不是风格的问题而是语义的问题。 在HTTP中PUT被定义为idempotent的方法POST则不是这是一个很重要的区别。 “Methods can also have the property of idempotence in that (aside from error or expiration issues) the side-effects of N 0 identical requests is the same as for a single request.” 上面的话就是说如果一个方法重复执行多次产生的效果是一样的那就是idempotent的。 举一个简单的例子假如有一个博客系统提供一个Web API模式是这样http://superblogging/blogs/post/{blog-name}很简单将{blog-name}替换为我们的blog名字往这个URI发送一个HTTP PUT或者POST请求HTTP的body部分就是博文这是一个很简单的REST API例子。我们应该用PUT方法还是POST方法取决于这个REST服务的行为是否是idempotent的假如我们发送两个http://superblogging/blogs/post/Sample请求服务器端是什么样的行为如果产生了两个博客帖子那就说明这个服务不是idempotent的因为多次使用产生了副作用了嘛如果后一个请求把第一个请求覆盖掉了那这个服务就是idempotent的。前一种情况应该使用POST方法后一种情况应该使用PUT方法。 也许你会觉得这个两个方法的差别没什么大不了的用错了也不会有什么问题但是你的服务一放到internet上如果不遵从HTTP协议的规范就可能给自己带来麻烦。比如没准Google Crawler也会访问你的服务如果让一个不是indempotent的服务可以用indempotent的方法访问那么你服务器的状态可能就会被Crawler修改这是不应该发生的 一个HTTP方法是幂等的指的是同样的请求被执行一次与连续执行多次的效果是一样的服务器的状态也是一样的。换句话说就是幂等方法不应该具有副作用统计用途除外。在正确实现的条件下GETHEADPUT和DELETE 等方法都是幂等的而 POST 方法不是。所有的 safe 方法也都是幂等的。
幂等性只与后端服务器的实际状态有关而每一次请求接收到的状态码不一定相同。例如第一次调用DELETE 方法有可能返回 200但是后续的请求可能会返回404。DELETE 的言外之意是开发者不应该使用DELETE方法实现具有删除最后条目功能的 RESTful API。
需要注意的是服务器不一定会确保请求方法的幂等性有些应用可能会错误地打破幂等性约束。
GET /pageX HTTP/1.1是幂等的。连续调用多次客户端接收到的结果都是一样的
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1 POST /add_row HTTP/1.1不是幂等的。如果调用多次就会增加多行记录
POST /add_row HTTP/1.1
POST /add_row HTTP/1.1 - Adds a 2nd row
POST /add_row HTTP/1.1 - Adds a 3rd rowDELETE /idX/delete HTTP/1.1是幂等的即便是不同请求之间接收到的状态码不一样
DELETE /idX/delete HTTP/1.1 - Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1 - Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1 - Returns 404