首页 > 其他分享 >RESTful 下请求方法的幂等性

RESTful 下请求方法的幂等性

时间:2023-08-26 21:32:37浏览次数:27  
标签:请求 RESTful PATCH user PUT 服务器 方法

概念阐述

一个 HTTP 方法是幂等的,指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说就是,幂等方法不应该具有副作用(统计用途除外)。所有的 safe 方法也都是幂等的。

幂等性只与后端服务器的实际状态有关,而每一次请求接收到的状态码不一定相同。需要注意的是,服务器不一定会确保请求方法的幂等性,有些应用可能会错误地打破幂等性约束。

Safe(安全)

如果说一个 HTTP 方法是安全的,是指这是个不会修改服务器的数据的方法。也就是说,这是一个对服务器只读操作的方法。这些方法是安全的:GETHEADOPTIONS。所有安全的方法都是idempotent的,但并非所有幂等方法都是安全的,例如,PUTDELETE 都是幂等的,但不是安全的。

分析图表

HTTP Method Idempotent 幂等 Safe 安全
OPTIONS ✔️ ✔️
HEAD ✔️ ✔️
GET ✔️ ✔️
POST
PUT ✔️
PATCH
DELETE ✔️

为什么put和delete是幂等,而patch则是非幂等的?

PUT【幂等】

 PUT /user/1   #修改id为 1 的 user 的全部信息

用于更新资源,没有的话则执行创建操作。每次执行请求时都会先判断一下序号为1的User信息是否存在,不存在则创建,否则视为更新。很显然,请求携带的数据每次都是一样的,所以不论请求多少次,最终的结果都是后台存在这么一个资源(同内容覆盖式的更新或创建资源)。

PATCH【非幂等】

 PATCH /user/1/house/3   #给id为1的user增加3个大房子

用于更新资源,即数据实体的一部分属性(局部修改),该数据必然存在,否则失去更新意义。每次执行请求时都会先判断一下序号为1的User信息是否存在,存在则更新数据信息。根据URL,我们需要处理的是将User的house属性增加3,很显然,多次请求时会重复增加,而无法保持为一个确定的值。PATCH 处于不可控的地位,所以说 PUT 方法是幂等的,而 PATCH 方法不是幂等的。

::: hljs-center

:::

标签:请求,RESTful,PATCH,user,PUT,服务器,方法
From: https://blog.51cto.com/u_16237732/7246172

相关文章

  • 安装opencv_contrib-3.4.9, fatal error: opencv2/xfeatures2d.hpp: 没有那个文件或目
    1.在Opencv的CmakeLists.txt中加入以下include语句:INCLUDE_DIRECTORIES("/home/yourusername/Dependencies/opencv-3.4.9/opencv_contrib-3.4.9/modules/xfeatures2d/include")2.ippicv_2019_lnx_intel64_general_20180723.tgz下载地址:链接:https://pan.baidu.com/s/1mu......
  • vue2中上传多个文件的方法
    在Vue2中,可以使用HTML5的input元素的multiple属性来实现上传多个文件。首先,在模板中添加一个input元素,并设置type为file,multiple为true:<inputtype="file"multiple@change="handleFileUpload">然后,在Vue实例中,定义handleFileUpload方法来处理文件上传事件:methods:{handleFil......
  • CentOS操作系统忘记密码处理方法
    开机后在改画面按e键找到‘linux16’开头的行,修改‘ro’为‘rwinit=/sysroot/bin/sh’,进入单用户模式,按ctrl+x进入以后......
  • 二次型配方法不会配?这个【偏导数配方法】你绝对不能错过哦
    二次型求标准型和规范型的时候用配方法不会配?配了半天也没配出来平方项?那就用这个偏导数配方法吧,程序化操作,相当好用,墙裂推荐:详细内容在这里:https://zhaokaifeng.com/16920/......
  • Python 实现 定义个矩形类,有长和宽两个实例属性,还有一个计算面积的方法
    思路:'''1.定义矩形类2.定义属性属性分:类属性和实例属性实例属性==》self.属性===》self是一个参数在一个方法中==》_init_方法3.定义方法defArea(self):s=self.length*self.width'''classSquare:def__init__(self,length,width):#实例属性sel......
  • ME软件下载 Adobe Media Encoder2023最新版 详细安装方法
    一、软件介绍MediaEncoder2023是一款功能十分强大的视频和音频编码类的软件。ME是一款常用的视频音频编辑工具,使用这款软件可以对音视频进行编辑、转码,以及加入各种渲染效果等等。AdobeMediaEncoder2023可以收录、转码、创建代理和输出您可以想象的几乎任何格式。AdobeMedia......
  • 关于自建Rustdesk 远程桌面服务器的公网访问:无法连接中继服务器的问题解决方法
    自建服务器位于内网时,内网客户端ID/中继的地址通常写成内网IP,外网客户端一般会用公网IP进行端口映射,但这样设置出现外网客户端无法连接中继服务器,但内网客户端使用正常的现象。经过半天的排查分析,当内网和外网填写的自定义服务器地址时,rust服务器无法识别出需要使用nat包的地址,默......
  • 两种不同的方法来检查Python中的变量是否是字符串
    在Python中,每个变量都有一个数据类型。数据类型表示一个变量内部存储的是哪种数据。数据类型是编程语言最重要的特征,它区分了我们可以存储的不同类型的数据,如字符串、int和float。在处理许多编程问题时,可能会遇到这样的情况:我们需要找到某个变量的数据类型来对其执行一些任务。......
  • 分享Webstorm2023激活方法(亲测有效,永久可用)
    WebStorm是jetbrains公司旗下一款JavaScript开发工具。被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScriptIDE”等。本激活教程适用Windows/Mac/Linux系统,文中以Windows系统为例做讲解,其他系统按照教程顺序即可。第一步:下载......
  • iptables使用方法
    -A(添加-I(插入-D(删除-F(清除所有-L(显示 -P(默认策略举例:iptables-AINPUT-s10.7.226.135iptcp--dport22-jDROP(丢弃iptables-LINPUT(输入  FORWARD(转发 OUTPUT(输出iptables-AINPUT-s192.168.1.10-jACCEPT(同意 iptables-IINPUT2-s192.168.1.1......