PUT,POST和PATCH有什么区别?

sel*_*mar 228 http http-post http-put http-patch

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

Lit*_*mar 197

POST

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

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

补丁

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

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

REST中的PUT与POST

  • 虽然这是一个完全技术上准确的答案,但该语言符合"行话".在这个答案中使用的术语只有那些不需要提出基本问题的人才能理解. (107认同)
  • @jreikes完全是胡说八道。我不知道该问题的答案,但对响应的理解很好。这是一个很好的答案 (4认同)

Kri*_*hna 169

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来检查响应.打开提琴手,然后选择"撰写"选项卡.如下所示指定动词和URL,然后单击"执行"以检查响应.

动词: GET

网址: 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:

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

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

使用Fiddler或PostMan 进行检查:我们可以使用fiddler来检查响应.打开提琴手,然后选择"撰写"选项卡.如下所示指定动词和URL,然后单击"执行"以检查响应.

动词: POST

网址: 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来检查响应.打开提琴手,然后选择"撰写"选项卡.如下所示指定动词和URL,然后单击"执行"以检查响应.

动词: PUT

网址: 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来检查响应.打开提琴手,然后选择"撰写"选项卡.如下所示指定动词和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

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

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

  • PUT不是更新.PUT是在给定URI处创建或替换实体.根据HTTP规范,PUT是幂等的.是的,它可以用来更新,但只考虑更新是不正确的. (50认同)
  • 我同意PUT不会更新,可以使用replace进行映射,因为当您发送PUT时,它将覆盖现有资源。但是,如果我们发送PATCH,它将仅替换指定的条目。 (2认同)
  • 这个答案要好得多,但不能与 PATCH 相比:/sf/answers/44133281/ (2认同)

a_m*_*dev 52

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

  • POST总是用于创建资源(是否复制无关紧要)
  • PUT用于检查资源是否存在然后更新,否则创建新资源
  • PATCH总是用于更新资源

  • 这并不完全准确。rfc 指出,“POST 方法请求目标资源根据资源自身的特定语义处理请求中包含的表示”。“将数据附加到资源的现有表示”是 rfc 提供的示例之一。https://tools.ietf.org/html/rfc7231#section-4.3.3 (2认同)
  • @stevec 应用程序/API。例如,您可以设计一个 API,它接受 /delete 的 POST,但不一定具有创建新资源的结果(例如 /deletions/{id})。 (2认同)

Ank*_*Rai 39

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

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

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

  • 看起来 PUT 的意思是“更新并覆盖”。似乎 PATCH 的意思是“更新和合并”。我只是想用一致且简洁的术语来描述您的答案很好地解释的内容。 (3认同)

小智 23

最简单的解释:

POST - 创建新记录

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

补丁 - 更新

GET - 读取

删除 - 删除

  • 这与您两周前发布的 [Kwame 的答案](/sf/answers/4178826711/) 有什么本质上的不同? (5认同)

beg*_*ers 15

PUTPATCH之间的主要区别请求:

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

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

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

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

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


Kwa*_*edu 13

这么想……

POST - 创建

PUT - 替换

补丁 - 更新

GET - 读取

删除 - 删除

  • 我可能会添加[这种区别](/sf/ask/44131741/#comment18665369_2590281):“_PUT如果客户端确定结果资源的地址,POST如果服务器可以。_” (2认同)

小智 7

以下定义来自真实示例。

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

  1. 开机自检

    • 如果客户使用POST方法发送没有任何标识符的数据,则我们将存储它并分配一个新的标识符。
    • 如果客户使用POST方法再次发送相同的数据而没有任何标识符,那么我们将存储它并分配一个新的标识符。
    • 注意:这里允许重复
    • 如果客户发送带有标识符的数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将更新数据,否则我们将创建数据并分配一个新的标识符。
  2. 补丁

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

注意:在Put方法上,如果找不到标识符,则不会引发异常。但是在Patch方法中,如果找不到标识符,则会引发异常。

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


小智 6

请求类型

  • 创建-POST
  • 阅读-GET
  • 创建或更新-PUT
  • 删除-删除
  • 更新-PATCH

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

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

get :-

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

{
id:1
name:parth
email:x@x.com
}
Run Code Online (Sandbox Code Playgroud)

post :-

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

put :-

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

{
id:1
name:parth
email:x@x.com
}
Run Code Online (Sandbox Code Playgroud)
  • 执行put-localhost / 1 put电子邮件:ppp@ppp.com
{
id:1
email:ppp@ppp.com
}
Run Code Online (Sandbox Code Playgroud)

patch

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

id:1
name:parth
email:x@x.com
}
Run Code Online (Sandbox Code Playgroud)

补丁名称:w

id:1
name:parth
email:x@x.com
}
Run Code Online (Sandbox Code Playgroud)
HTTP方法
得到是
开机自检
放是
补丁号*
选项是
头是
删除是

资源:等幂- 什么是等幂?


Kon*_*kin 5

参考RFChttps://www.rfc-editor.org/rfc/rfc9110.html#name-method-definitions

POST - 创建新对象
PUT - 更新旧对象或创建新对象(如果不存在)
PATCH - 更新/修改旧对象。主要用于修改。

像前面提到的那样,RFC 的解释很少,但是如果你仔细阅读,你会发现 PUT 和 PATCH 方法是在 POST 之后出现的,这是创建原生HTML 表单的常见老式方法。

因此,如果您尝试支持所有方法(例如 PATCH 或 DELETE),建议使用所有方法的最合适方法是坚持CRUD模型:

创建- PUT
读取- 获取
更新- PATCH
D删除 - 删除

旧的 HTML 原生方式:
读取 - GET
创建/更新/删除 - POST

祝码农好运!;-)