PUT,POST和PATCH有什么区别?

时间:2015-06-27 13:15:20

标签: http http-post http-put http-patch

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

10 个答案:

答案 0 :(得分:173)

POST

当客户端将数据发送到服务器并且服务器将决定新创建的资源的URI时,可以使用

HTTP.POST。 POST方法用于请求源服务器接受请求中包含的实体,作为请求行中Request-URI标识的资源的新下级。

PUT

当客户端向服务器发送数据并且客户端正在确定新创建的资源的URI时,可以使用

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

PATCH

当客户端发送一个或多个要由服务器应用的更改时,可以使用

HTTP.PATCH。 PATCH方法请求将请求实体中描述的一组更改应用于Request-URI标识的资源。这组更改以称为补丁文档的格式表示。

有关更多信息,请参阅以下提到的网址

PUT vs. POST in REST

答案 1 :(得分:142)

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

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

  1. 创建 - POST
  2. 阅读 - GET
  3. 更新 - PUT
  4. 删除 - 删除
  5. 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 ...",&# 34;身体":" quia et suscipit ..."

    在“happy”(或非错误)路径中,GET返回XML或JSON中的表示形式,以及200(HTTP)的HTTP响应代码。在错误的情况下,它通常返回404(未找到)或400(不良请求)。

    2)POST:

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

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

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

    动词: POST

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

    动词: PUT

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

    请求正文:

    数据:{     标题:' foo',     身体:' 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

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

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

    <强> PATCH:

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

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

    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

答案 2 :(得分:33)

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

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

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

答案 3 :(得分:7)

这样想吧...

POST-创建

放置-替换

补丁-更新

获取-阅读

删除-删除

答案 4 :(得分:4)

请求类型

  • 创建-POST
  • 阅读-GET
  • 创建或更新-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 放置电子邮件: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

资源: 幂等-What is Idempotency?

答案 5 :(得分:4)

PUT PATCH 请求之间的主要区别:

假设我们有一个资源,可以保存一个人的名字和姓氏。

如果我们想更改名字,我们会发送更新请求

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

在这里,尽管我们只是在更改名字,但是在PUT请求中,我们必须同时发送参数和最后一个参数。
换句话说,必须重新发送所有值,即完整的有效负载。

但是,当我们发送PATCH请求时,我们仅发送我们要更新的数据。换句话说,我们仅发送要更新的名字,而无需发送姓氏。

答案 6 :(得分:4)

最简单的解释:

发布-创建新记录

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

补丁-更新

获取-阅读

删除-删除

答案 7 :(得分:2)

以下定义来自真实示例。

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

  1. POST

    • 如果客户使用POST方法发送没有任何标识符的数据,则我们将存储它并分配一个新的标识符。
    • 如果客户再次使用POST方法发送没有任何标识符的相同数据,则我们将存储它并分配一个新的标识符。
    • 注意:此处允许重复
  2. 输入

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

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

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

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

答案 8 :(得分:1)

这是所有内容的简单说明:

  • POST 始终用于创建资源(无论是否重复)
  • PUT 用于检查资源是否存在,然后进行更新,否则创建新资源
  • PATCH 始终用于更新资源

答案 9 :(得分:0)

PUT和PATCH分别发送全部和部分数据以分别替换/更新之间的差异是很合逻辑的。但是,仅需注意以下几点

  1. 有时将POST视为带有用于创建的PUT的更新
  2. HTTP是否强制/检查PATCH中的全部数据还是部分数据?否则,PATCH可能与PUT / POST中的更新完全相同