POST,GET,PUT,DELETE,PATCH等方法,你有真正了解过吗?

2,077 阅读4分钟

REST模式:POST,GET,PUT,DELETE,PATCH的含义与区别

大图

前言:

最近在写前后端数据交互, 以前一直没搞懂 PUT 请求和 DELETE 请求具体事项,于是翻阅大量的文档后总结此篇,便分享出来,先声明,内容可能很干,希望有需要的人可以耐心看完!!!

Http 定义了与服务器交互的不同方法,最基本的方法有4种,分别是 POST,GET,PUT,DELETE; 而 PATCH 是后来新增的方法。URL全称是资源描述符, 我们可以这样认为:一个URL地址,它用于描述一个网络上的资源, 而 HTTP 中的 POST,GET,PUT,DELETE,PATCH 就对应着对这个资源的创建,查看,创建或更新,删除,部分更新等五种操作。 在介绍五种方法的含义之前,先来理解幂等的含义:

幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。 这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,setTrue() 函数 就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现。

下面将介绍这五种方法的大概含义:

1. 根据HTTP规范,GET用于信息获取,而且是安全的和幂等的

GET请求是安全的。所谓安全是指不管进行多少次操作,资源的状态都不会改变。 该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据, 不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

2. 根据HTTP规范,POST一般用于创建数据,不是安全和幂等的

请求主体的类型由 Content-Type 首部指定, PUT 和POST方法的区别是, PUT 方法是幂等的:连续调用一次或者多次的效果相同(无副作用)。 连续调用同一个 POST 可能会带来额外的影响,比如多次提交订单。

POST请求既不是安全的,也不是幂等的,比如常见的POST重复加载问题: 当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。

3. PUT一般用于创建或完整更新数据,而且是安全和幂等的

PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的 update 操作一样, 用来修改完整的数据内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作, 其结果并没有不同。

4. DELETE一般用于删除数据,而且是安全和幂等的

DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作, 无论进行多少次DELETE操作,其结果并没有不同。

5. PATCH一般用于更新部分数据,不是安全和幂等的

在 HTTP 协议中, PUT 方法已经被用来表示对资源进行整体覆盖, 而 POST 方法则没有对标准的补丁格式的提供支持。不同于 PUT 方法,而与 POST 方法类似, PATCH 方法是非幂等的,这就意味着连续多个的相同请求会产生不同的效果。

要判断一台服务器是否支持 PATCH 方法,那么就看它是否将其添加到了响应首部 Allow 或者 Access-Control-Allow-Methods(在跨域访问的场合,CORS)的方法列表中 。

另外一个支持 PATCH 方法的隐含迹象是 Accept-Patch 首部的出现,这个首部明确了 服务器端可以接受的补丁文件的格式。

PATCH请求是对PUT请求的补充,一般用来对已知资源部分更新,是后来新出的标准, GitHub Api也开始使用。


参考资源:

HTTP 请求方法