今天在公司接触到 put 接口的请求类型,大概百度了一下 put 和 post 的区别主要在于幂等性,post 请求类型不是幂等操作,put 是幂等操作。
在以往的经验中,post 请求控制幂等主要在服务端的代码中控制,也就是需要主动实现。那么 put 的幂等性是如何实现的,以及怎么保证的?这部分不怎么明白
POST 所对应的 URI 并非创建的资源本身,而是资源的接收者。比如:POST http://www.forum.com/articles 的语义是在http://www.forum.com/articles 下创建一篇帖子,HTTP 响应中应包含帖子的创建状态以及帖子的 URI。两次相同的 POST 请求会在服务器端创建两份资源,它们具有不同的 URI;所以,POST 方法不具备幂等性。而 PUT 所对应的 URI 是要创建或更新的资源本身。比如:PUT http://www.forum/articles/4231 的语义是创建或更新 ID 为 4231 的帖子。对同一 URI 进行多次 PUT 的副作用和一次 PUT 是相同的;因此,PUT 方法具有幂等性.
不理解为什么 put 的第二次请求是如何保证幂等的,看起来不是在代码中处理.
还有一个场景,比如将一个订单的状态从待生效推到生效,使用 put 请求,第一次成功,后面如果需要从失效推到生效,如果使用相同的参数因为幂等性会导致推不成功,却返回了成功?