post or put?

	post和put作为两种http方法常常引起人们的困惑,很多人都知道post用于新增资源而put用于更新资源,
	[RFC 2016](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)指明了两者的区别,
	本质在于是否幂等。	

幂等性

	在REST APIs的上下文中,如果单个请求被提交多次造成的结果一致,则称它为幂等。
	在设计REST APIs时,必须意识到用户可能有多次提交请求,不管用户是有意识的还是无意识的,
	都需要设计出容错的API保证系统的稳定。

diff

	***put***
	put方法请求存储在uri中的封闭实体,如果uri指向一个已经存在的资源,则执行更新操作,
	如果资源不存在但uri有效则执行新增操作。
	put方法是幂等的,即使你提交多次单个请求,效果也同第一次一样。
	put更新的是在一个集合中已经存在的单个资源,客户端负责在uri中通过路径参数标识这个单个资源。
	比如使用一条device数据库中的id,eg. HTTP PUT /devices/{id}。
	put针对的资源的全体,对于部分新增可以用patch
	
	***post***
	post方法请求对应于uri中封闭实体中的一个新的子资源,这个封闭实体必须是一个资源集合。
	post方法是非幂等的,提交N次请求会在服务端产生N个不同的资源,对应N个uri。
	post新增是在一个资源集合中产生子资源,通常在服务端产生唯一标识该资源的自增id保证其非幂等性,
	所以在请求体中不需要加入诸如id一类的路径参数,eg.HTTP POST /devices

总结

  总而言之,put通常但不完全用于更新操作,post通常但不完全用于新增操作,eg.DELETE /item/last,
  假设某些系统中中会出现这种DELETE API,如果执行N次操作则会删除N个资源,这与delete的幂等性相悖,
  这时可以用post来代替delete,eg.POST /item/last,这样更符合HTTP规范。

参考restapi.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值