put、patch与post区别

本文深入探讨HTTP方法中的幂等性概念,对比POST、PUT和PATCH方法在资源操作中的特性,强调幂等性在重复请求场景下的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

idempotent 幂等的

  如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的;  idempotent的意思是如果相同的操作再執行第二遍第三遍,結果還是一樣。

POST方法

  POST方法请求的目标是一个行为处理器 。

  用来创建一个子资源,如 /api/users,会在users下面创建一个user,如users/1;  POST方法不是幂等的,多次执行,将导致多条相同的用户被创建(users/1,users/2 …  而这些用户除了自增长id外有着相同的数据,除非你的系统实现了额外的数据唯一性检查) 。

 

  PUT方法和PATCH方法所请求的目标地址都是直接指向资源的 。

PATCH方法

  PATCH方法是新引入的,是对PUT方法的补充,用来对已知资源进行局部更新。

PUT方法

  PUT用于替换资源(新增或完整更新 ) 。

  PUT比较正确的定义是 Replace (Create or Update),  例如 PUT /items/1 的意思是替換 /items/1 ,如果已經存在就替換,沒有就新增;  因此,PUT方法一般会用来更新一个已知资源,除非在创建前,你完全知道自己要创建的对象的URI 。

PATCH和PUT区别说明

  PUT方法的实体无结构的,它直接把实体部分的数据替换到服务器的资源上。而PATCH提供的实体则需要根据程序或其它协议的定义,解析后在服务器上执行,以此来修改服务器上的数据。也就是说,PATCH请求是会执行某个程序的,如果重复提交,程序可能执行多次,对服务器上的资源就可能造成额外的影响,这就可以解释它为什么是不幂等的了。

  举个例子,如果服务器上有个资源/abc.int,里面存放一个整数,值为 1。也就是说,GET这个资源的话,服务器响应的实体只包含了 1 这个数字。现在在自己的框架中定义当提交PATCH请求,实体匹配^+\d+$的格式时就对服务器资源中的数字执行一个加法操作。于是当客户端向/abc.int地址发起PATCH请求,实体部分为+3之后,服务器的/abc.int资源中的数据就变成 4,也就是说,GET它会得到 4。如果客户端不小心重复提交了PATCH请求,那么+3就会被再执行一次,这个资源的数据就变成 7。

  这么一看,PATCH和PUT的区别就非常明显了吧。

 

 

转载于:https://www.cnblogs.com/slivelove/p/9913823.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值