PUT, POST和PATCH的区别是什么?

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

456986 次浏览

HTTP动词中PUTPOSTGETDELETEPATCH的区别:

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

  1. Create - POST
  2. 阅读-获取
  3. 更新- PUT
  4. 删除-删除

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

< p > 注意:
由于POST、PUT、DELETE会修改内容,因此使用Fiddler对下面url进行的测试只是模拟更新。它实际上没有删除或修改。我们可以只查看状态代码来检查是否发生了插入、更新和删除

URL: http://jsonplaceholder.typicode.com/posts/

  1. 得到:

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

<强>与小提琴手或邮递员核对: 我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。 如下所示指定动词和url,然后单击Execute检查响应

动词:得到

url: http://jsonplaceholder.typicode.com/posts/

回应:你会得到这样的响应:

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

在“愉快”(或无错误)路径中,GET返回一个XML或JSON表示形式和一个HTTP响应代码200 (OK)。在错误情况下,它通常返回404 (NOT FOUND)或400 (BAD REQUEST)。

2):

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

在成功创建时,返回HTTP状态201,返回一个Location头,其中包含指向新创建的HTTP状态201的资源的链接。

<强>与小提琴手或邮递员核对: 我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。 如下所示指定动词和url,然后单击Execute检查响应

动词:帖子

url: http://jsonplaceholder.typicode.com/posts/

请求主体:

data: {
title: 'foo',
body: 'bar',
userId: 1000,
Id : 1000
}

你会收到响应代码201。

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

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

3)说:

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

<强>与小提琴手或邮递员核对: 我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。 如下所示指定动词和url,然后单击Execute检查响应

动词:

url: http://jsonplaceholder.typicode.com/posts/1

请求主体:

data: {
title: 'foo',
body: 'bar',
userId: 1,
Id : 1
}

回应:在成功更新时,它从PUT中返回状态200(如果没有返回任何正文内容,则返回状态204)。

4)删除:

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

在成功删除时,返回HTTP状态200 (OK)以及一个响应体,可能是已删除项的表示(通常需要太多带宽),或者是一个封装的响应(请参阅下面的返回值)。或者返回HTTP状态204 (NO CONTENT),没有响应体。换句话说,不带正文的204状态或jsend样式的响应和HTTP状态200是推荐的响应。

<强>与小提琴手或邮递员核对: 我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。 如下所示指定动词和url,然后单击Execute检查响应

动词:删除

url: http://jsonplaceholder.typicode.com/posts/1

回应:在成功删除时,它返回HTTP状态200 (OK)以及响应体。

PUT和PATCH之间的示例

如果我不得不改变我的名字,然后发送PUT请求更新:

{ "first": "Nazmul", "last": "hasan" }

这里,为了更新第一个名字,我们需要再次发送数据的所有参数。

补丁:

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

详情请参阅以下连结:

PUT =用所提供的新表示替换整个RESOURCE

PATCH =用所提供的值替换源资源的部分和|或资源的其他部分被更新,你没有提供(时间戳)和|或更新资源影响其他资源(关系)

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

请求类型

  • create - POST
  • read - GET
  • create或update - PUT
  • delete -删除
  • update - PATCH

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 李把电子邮件: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  Method
GET     yes
POST    no
PUT     yes
PATCH   no*
OPTIONS yes
HEAD    yes
DELETE  yes
< p >资源: 幂等——什么是等幂?

下面的定义来自真实世界的例子。

< p > 示例概述
对于每个客户端数据,我们存储一个标识符来查找客户端数据,并将该标识符发送回客户端以供参考
  1. < p > 帖子

    • 如果客户端发送的数据没有任何标识符,那么我们将存储数据并分配/生成一个新的标识符。
    • 如果客户端再次发送没有任何标识符的相同数据,那么我们将存储该数据并分配/生成一个新的标识符。
    • 请注意:这里允许复制。
  2. < p >

    • 如果客户端发送带有标识符的数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将用数据更新资源,否则我们将用数据创建一个资源并分配/生成一个新的标识符。
  3. < p > 补丁

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

请注意:在方法中,如果没有找到标识符,则不会抛出异常。但在补丁方法中,如果没有找到标识符,则抛出异常。

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

补丁请求的主要区别:

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

如果我们想要改变名字,那么我们发送一个put请求Update

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

在这里,虽然我们只改变了名字,但是通过PUT请求,我们必须发送第一个和最后一个参数 换句话说,必须再次发送所有值,即完整的有效负载

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

这里是一个简单的描述:

  • 帖子总是用于创建资源(是否复制并不重要)
  • 用于检查资源是否存在,然后更新,否则创建新的资源
  • 补丁总是用于更新资源

PUT和amp之间的区别很符合逻辑;补丁w.r.t发送完整的&分别替换/更新部分数据。但是,我只提出以下几点

  1. 有时POST被认为是用于更新w.r.t PUT用于创建
  2. HTTP是否要求/检查在PATCH中发送完整数据还是部分数据?否则PATCH可能与PUT/POST中的update完全相同

这样想吧……

POST - create

PUT -替换

补丁-更新

GET - read

DELETE -删除

最简单的解释:

创建新的记录

PUT -如果记录存在,更新else,创建一个新记录

补丁-更新

GET - read

DELETE -删除