426

HTTP 协议中的 PUT、POST 和 PATCH 方法有什么区别?

4

9 回答 9

306

HTTP 动词中的 PUT、POST、GET、DELETE 和 PATCH 之间的区别:

最常用的 HTTP 动词 POST、GET、PUT、DELETE 类似于数据库中的 CRUD(创建、读取、更新和删除)操作。我们以大写形式指定这些 HTTP 动词。所以,下面是它们之间的比较。

  1. 创建 - 发布
  2. 阅读 - 获取
  3. 更新 - 放
  4. 删除 - 删除

PATCH:提交对资源的部分修改。如果您只需要更新资源的一个字段,您可能需要使用 PATCH 方法。

注意:
由于 POST、PUT、DELETE 修改了内容,使用 Fiddler 对以下 url 的测试只是模仿了更新。它实际上并没有删除或修改。我们可以通过查看状态码来检查是否发生了插入、更新、删除。

网址:http: //jsonplaceholder.typicode.com/posts/

1)获取:

GET 是最简单的一种 HTTP 请求方法;每次单击链接或在地址栏中键入 URL 时浏览器使用的一种。它指示服务器将 URL 标识的数据传输给客户端。绝不应该因为 GET 请求而在服务器端修改数据。从这个意义上说,GET 请求是只读的。

使用 Fiddler 或 PostMan 检查: 我们可以使用 Fiddler 来检查响应。打开 Fiddler 并选择 Compose 选项卡。如下所示指定动词和 url,然后单击执行以检查响应。

动词:得到

网址:http: //jsonplaceholder.typicode.com/posts/

响应:您将收到如下响应:

“userId”:1,“id”:1,“title”:“sunt aut...”,“body”:“quia et suscipit...”

在“快乐”(或非错误)路径中,GET 返回 XML 或 JSON 格式的表示和 200(OK)的 HTTP 响应代码。在错误情况下,它最常返回 404(未找到)或 400(错误请求)。

2)发布:

POST 动词主要用于创建新资源。特别是,它用于创建从属资源。也就是说,从属于某个其他(例如父)资源。

成功创建后,返回 HTTP 状态 201,返回 Location 标头,其中包含指向具有 201 HTTP 状态的新创建资源的链接。

使用 Fiddler 或 PostMan 检查: 我们可以使用 Fiddler 来检查响应。打开 Fiddler 并选择 Compose 选项卡。如下所示指定动词和 url,然后单击执行以检查响应。

动词:发布

网址:http: //jsonplaceholder.typicode.com/posts/

请求正文:

数据:{标题:'foo',正文:'bar',userId:1000,Id:1000}

响应:您将收到响应代码为 201。

如果我们想检查 Id = 1000 的插入记录,请将动词更改为 Get 并使用相同的 url,然后单击 Execute。

如前所述,上面的 url 只允许读取(GET),我们不能真正读取更新的数据。

3)放:

PUT 最常用于更新功能,PUT 到一个已知的资源 URI,请求正文包含原始资源的新更新表示。

使用 Fiddler 或 PostMan 检查: 我们可以使用 Fiddler 来检查响应。打开 Fiddler 并选择 Compose 选项卡。如下所示指定动词和 url,然后单击执行以检查响应。

动词:

网址:http: //jsonplaceholder.typicode.com/posts/1

请求正文:

数据:{标题:'foo',正文:'bar',userId:1,Id:1}

响应:成功更新时,它会从 PUT 返回 200(如果未返回正文中的任何内容,则返回 204)。

4)删除:

DELETE 很容易理解。它用于删除由 URI 标识的资源。

成功删除后,返回 HTTP 状态 200(OK)以及响应正文,可能是已删除项目的表示(通常需要太多带宽),或者是包装响应(请参阅下面的返回值)。要么返回 HTTP 状态 204(无内容),没有响应正文。换句话说,没有正文的 204 状态,或者 JSEND 样式的响应和 HTTP 状态 200 是推荐的响应。

使用 Fiddler 或 PostMan 检查: 我们可以使用 Fiddler 来检查响应。打开 Fiddler 并选择 Compose 选项卡。如下所示指定动词和 url,然后单击执行以检查响应。

动词:删除

网址:http: //jsonplaceholder.typicode.com/posts/1

响应:成功删除后,它会返回 HTTP 状态 200(OK)以及响应正文。

PUT 和 PATCH 之间的示例

如果我必须更改我的名字,请发送 PUT 更新请求:

{ "first": "Nazmul", "last": "hasan" } 所以,为了更新名字,我们需要再次发送数据的所有参数。

修补:

补丁请求说我们只会发送我们需要修改的数据,而不修改或影响数据的其他部分。例如:如果我们只需要更新名字,我们只传递名字。

请参阅以下链接以获取更多信息:

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

PATCH 和 PUT 请求的主要区别是什么?

http://www.restapitutorial.com/lessons/httpmethods.html

于 2016-11-21T00:43:42.093 回答
81

以下定义来自现实世界的示例。

示例概述
对于每个客户端数据,我们存储一个标识符以查找该客户端数据,并且我们将该标识符发送回客户端以供参考。

  1. 邮政

    • 如果客户端发送的数据没有任何标识符,那么我们将存储数据并分配/生成一个新的标识符。
    • 如果客户端再次发送相同的数据而没有任何标识符,那么我们将存储数据并分配/生成一个新的标识符。
    • 注意:此处允许重复。
    • 如果客户端发送带有标识符的数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将使用数据更新资源,否则我们将使用数据创建资源并分配/生成新标识符。
  2. 修补

    • 如果客户端发送带有标识符的数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将使用数据更新资源,否则我们将抛出异常。

注意:在PUT方法中,如果找不到标识符,我们不会抛出异常。但是在PATCH方法中,如果找不到标识符,我们将抛出异常。

如果您对上述内容有任何疑问,请告诉我。

于 2019-04-07T19:51:20.213 回答
77

PUT = 用提供的新表示替换整个资源

PATCH = 用提供的值替换部分源资源和|或更新您尚未提供的资源的其他部分(时间戳)和|或更新资源影响其他资源(关系)

https://laracasts.com/discuss/channels/general-discussion/whats-the-differences-between-put-and-patch?page=1

于 2018-05-09T15:45:20.717 回答
69

以下是对所有内容的简单描述:

  • POST始终用于创建资源(是否重复无关紧要)
  • PUT用于检查资源是否存在然后更新,否则创建新资源
  • PATCH始终用于更新资源
于 2019-11-06T12:38:10.860 回答
37

最简单的解释:

POST - 创建新记录

PUT - 如果记录存在,则更新,否则创建新记录

补丁 - 更新

获取 - 阅读

删除 - 删除

于 2020-01-24T10:58:07.980 回答
21

这样想吧……

POST - 创建

PUT - 替换

补丁 - 更新

获取 - 阅读

删除 - 删除

于 2020-01-11T18:43:58.567 回答
20

请求类型

  • 创建 - 发布
  • 阅读 - 获取
  • 创建或更新 - PUT
  • 删除 - 删除
  • 更新 - 补丁

GET/PUT 是幂等的 PATCH 有时是幂等的

什么是幂等的 - 这意味着如果我们多次触发查询,它不应该影响它的结果。(相同的输出。假设一头母牛怀孕了,如果我们再次繁殖它,那么它就不会怀孕多次)

get:-

简单搞定。从服务器获取数据并将其显示给用户

{
id:1
name:parth
email:x@x.com
}

post:-

在数据库中创建新资源。这意味着它添加了新数据。它不是幂等的。

put:-

创建新资源,否则添加到现有资源。幂等,因为它每次都会更新相同的资源并且输出将是相同的。 前任。 - 初始数据

{
id:1
name:parth
email:x@x.com
}
  • 执行 put-localhost/1 put email:ppp@ppp.com
{
id:1
email:ppp@ppp.com
}

patch

所以现在出现了补丁请求 PATCH 有时可以是幂等的

id:1
name:parth
email:x@x.com
}

补丁名称:w

{
id:1
name:w
email:x@x.com
}
HTTP 方法
得到是
发布没有
放是
补丁号*
选项 是
头是的
删除是

资源 : Idempotent --什么是 Idempotency?

于 2019-02-17T11:31:29.960 回答
18

PUTPATCH请求之间的主要区别:

假设我们有一个资源,其中包含一个人的名字和姓氏。

如果我们想更改名字,那么我们发送一个更新请求

{ "first": "Michael", "last": "Angelo" }

在这里,虽然我们只更改名字,但对于 PUT 请求,我们必须先发送和最后发送两个参数。
换句话说,必须再次发送所有值,即完整的有效负载。

然而,当我们发送 PATCH 请求时,我们只发送我们想要更新的数据。换句话说,我们只发送名字来更新,不需要发送姓氏。

于 2019-08-20T08:19:45.770 回答
0

PUT 和 PATCH 之间的区别非常合乎逻辑,分别发送完整和部分数据以进行替换/更新。然而,只有几点如下

  1. 有时 POST 被认为是更新 wrt PUT 用于创建
  2. HTTP 是否要求/检查在 PATCH 中发送完整数据还是部分数据?否则,PATCH 可能与 PUT/POST 中的更新完全相同
于 2019-12-28T17:39:17.317 回答