这两个方法看起来都是讲一个资源附加到服务器端的请求,但其实是不一样的。一些狭窄的意见认为,POST方法用来创建资源,而PUT方法则用来更新资源。这个说法本身没有问题,但是并没有从根本上解释了二者的区别。事实上,它们最根本的区别就是:POST方法不是幂等的,而PUT方法则有幂等性。那这又衍生出一个问题,什么是幂等?

幂等(idempotent、idempotence)是一个抽象代数的概念。在计算机中,可以这么理解,一个幂等操作的特点就是其任意多次执行所产生的影响均与依次一次执行的影响相同。

POST在请求的时候,服务器会每次都创建一个文件,但是在PUT方法的时候只是简单地更新,而不是去重新创建。因此PUT是幂等的。

举一个简单的例子,假如有一个博客系统提供一个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方法。

最新文章

  1. powerdesigner导出word
  2. Android上dip、dp、px、sp等单位说明
  3. Open the Lock[HDU1195]
  4. [原创]java WEB学习笔记88:Hibernate学习之路-- -Hibernate检索策略(立即检索,延迟检索,迫切左外连接检索)
  5. bzoj 1862/1056 [HAOI2008]排名系统
  6. PLSA中的EM算法
  7. eclipse项目转android studio详解
  8. 3 linux、windows环境---路径分隔符不同导致的问题
  9. high performance program (SSE4.2 intrin instruction)
  10. Java 得到磁盘以及内存信息
  11. Ubuntu12.04 Firefox安装flash
  12. FastDFS 集群 安装 配置
  13. 原生JS和JQuery的区别
  14. CF1012B Chemical table
  15. 如何把PDF文件拆分为多个文件
  16. 关于XML的小思考
  17. 学习 Spring (四) Bean 的生命周期
  18. hash bucket
  19. 【SVN】Linux下svn搭建配置全过程——初学者轻松上手篇
  20. 【Java】 大话数据结构(15) 排序算法(2) (快速排序及其优化)

热门文章

  1. 前端开发面试题之JavaScript(转自公众号)(1)
  2. 面试:如何把xxx.sh使用/etc/init.d/xxx.sh start启动,并且可以用chkconfig配置开机自启动
  3. thinkcmf5增加微信管理app笔记
  4. 【Arduino开发板刷Bootloader01】
  5. Python学习笔记:输入输出,注释,运算符,变量,数字类型,序列,条件和循环控制,函数,迭代器与生成器,异常处理
  6. percpu之静态变量
  7. LeetCode(303)Range Sum Query - Immutable
  8. dwr介绍及配置
  9. ogre3D学习基础8 --- 资源管理器
  10. day05_03 字符串格式化