PUT,POST和PATCH有什么区别?

问题描述 投票:186回答:5

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

http http-post http-put http-patch
5个回答
178
投票

POST

当客户端将数据发送到服务器并且服务器将决定新创建的资源的URI时,可以使用HTTP.POST。 POST方法用于请求源服务器接受请求中包含的实体作为Request-URI中Request-URI标识的资源的新下级。

当客户端将数据发送到服务器并且客户端正在确定新创建的资源的URI时,可以使用HTTP.PUT。 PUT方法请求将所包含的实体存储在提供的Request-URI下。如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本。如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源。

补丁

当客户端发送一个或多个要由服务器应用的更改时,可以使用HTTP.PATCH。 PATCH方法请求将请求实体中描述的一组更改应用于Request-URI标识的资源。这组更改以称为修补文档的格式表示。

有关更多信息,请参阅下面提到的URL

PUT vs. POST in REST


147
投票

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

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

  1. 创建 - POST
  2. 读 - GET
  3. 更新 - PUT
  4. 删除 - 删除

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

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

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

1)GET:

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

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

动词:GET

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

回复:您将得到以下答复:

“用户ID” 1“到” 1“称号”:“还是......”,“体”:“它需要......”

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

2)POST:

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

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

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

动词:POST

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:

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

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

动词:PUT

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或PostMan进行检查:我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。如下所示指定动词和URL,然后单击“执行”以检查响应。

动词:删除

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

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

PUT和PATCH之间的示例

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

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

补丁:

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

有关更多信息,请参阅以下链接:

https://jsonplaceholder.typicode.com/

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

What is the main difference between PATCH and PUT request?

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


34
投票

PUT =使用提供的新表示替换ENTIRE RESOURCE

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

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


4
投票

Request Types

  • 创建 - POST
  • 读 - GET
  • 创建或更新 - PUT
  • 删除 - 删除
  • 更新 - 补丁

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

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

get :-

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

{
id:1
name:parth
email:[email protected]
}

post :-

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

put :-

创建新资源,否则添加到现有资源。幂等因为它每次都会更新相同的资源,输出也是一样的。恩。 - 初始数据

{
id:1
name:parth
email:[email protected]
}
{
id:1
email:[email protected]
}

patch

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

id:1
name:parth
email:[email protected]
}

补丁名称:w

{
id:1
name:w
email:[email protected]
}
HTTP  Method
GET     yes
POST    no
PUT     yes
PATCH   no*
OPTIONS yes
HEAD    yes
DELETE  yes

资源:幂等 - What is Idempotency?


4
投票

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

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

  1. POST 如果客户端使用POST方法发送没有任何标识符的数据,那么我们将存储它并分配新的标识符。 如果客户端使用POST方法再次发送没有任何标识符的相同数据,那么我们将存储它并分配新的标识符。 注意:此处允许复制
  2. 放 如果客户端使用标识符发送数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将更新数据,否则我们将创建它并分配新的标识符。
  3. 补丁 如果客户端使用标识符发送数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将更新数据,否则我们将抛出异常。

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

如果您对上述内容有任何疑问,请与我们联系。

© www.soinside.com 2019 - 2024. All rights reserved.