PUT 和 PATCH 请求的区别
HTTP 是一种应用程序层协议,用于在网络设备之间传输数据。在 HTTP 中,可以使用多种方法。这些方法按顺序表示 CRUD(创建、读取、更新、删除)操作。一些 HTTP 方法具有许多相同的特性。因此,在 HTTP 系统中实现这些类似的 HTTP 方法之前,我们应该仔细研究它们。例如,PUT 和 PATCH 方法的特性之间存在相似之处,可能会造成混淆。两者都用于更新特定位置的资源。以下是它们之间的一些区别。
什么是 PUT 请求?
PUT 是一种更新资源的技术,客户端发送更新整个资源的数据。客户端使用 PUT 方法在 HTTP 服务器上创建实体或资源。此设置过程本身可以采用两种形式之一
更新资源
如果请求的实体尚不存在,服务器会创建它并向客户端返回成功代码 201。
如果实体已经存在,服务器会更新实体并向客户端返回 200 或 204 的成功代码。此外,如果 PUT 请求遇到问题,服务器应该向客户端提供相应的错误代码,通常是 4xx 或 5xx。它用于完全设置实体的信息。
在 PUT 方法中,我们需要发送整个资源以及需要更新的参数。
示例
如果要更新一个人的电话号码和电子邮件,需要将所有参数以及电话号码和电子邮件一起发送才能更新资源。否则,整个资源将被电话号码和电子邮件替换。
语法
PUT /html file HTTP/1.1
示例
PUT/html file HTTP/1.1 Host: example.com Content- type: text/html Content- length: 20 <p> New File </p>
响应
如果目标资源当前没有表示,并且 PUT 请求成功创建了一个表示,则源服务器应向用户代理发送 201(已创建)响应。
HTTP/1.1 201 Created Content-Location: /new.html
如果目标资源已经具有当前表示,并且该表示根据所包含表示的状态成功更改,则源服务器必须发送 200(确定)或 204(无内容)响应以指示请求成功。
HTTP/1.1 204 No Content Content-Location: /existing.html
什么是 PATCH 请求?
PATCH 方法仅部分修改资源的元素。PATCH 方法以原子方式执行请求的修改。这意味着如果服务器无法容纳所有请求的修改,则不会修改目标实体。
在这种方法中,如果请求正确执行,服务器会向客户端发送成功代码 204。否则,服务器将返回错误代码。客户端需要更新的字段只会更新,其余字段保持不变。
语法
PATCH /file.txt HTTP/1.1
示例
PATCH /file.txt HTTP/1.1 Host: www.example.com Content-Type: application/example If-Match: "e0023aa4e" Content-Length: 100
2xx 状态代码表示成功响应。
由于响应不包含有效负载正文,因此以下示例中使用 204 响应代码。200 代码响应中可能存在有效负载正文。
响应
HTTP/1.1 204 No Content Content-Location: /file.txt ETag: "e0023aa4f"
PUT 和 PATCH 请求的区别
下表重点介绍了 PUT 和 PATCH 请求的主要区别
PUT |
PATCH |
---|---|
PUT 是一种更新资源的技术,客户端发送更新整个资源的数据 |
PATCH 是一种资源修改方法,客户端传输更新的部分数据,而不更改完整数据 |
HTTP 的 PUT 方法是幂等的。因此,您在多次重试请求后进行的每次请求转换都算作一个请求 |
HTTP 请求的 PATCH 方法是非幂等的。因此,如果您多次尝试请求,最终将获得多个资源,每个资源都有不同的 URI |
使用 PUT 请求,客户端请求替换所包含的实体,该实体被视为保存在原始服务器上的资源的更改版本 |
PATCH 提供一组说明,指定如何部分修改存储在原始服务器上的资源以生成新版本 |
PUT 方法的带宽较高 |
PATCH 的带宽相对较小 |
结论
PUT 和 PATCH 都修改已存在的数据,但由于幂等性,它们以不同的方式进行。由于并非所有服务器都接受 PATCH,因此 PUT 比 PATCH 更常用。因为它们提供编辑记录的指令,并且是部分更新而不是像 PUT 请求那样完全替换记录,所以 PATCH 请求可能会导致意外结果。