HTTP 协议中的 PUT、POST 和 PATCH 方法有什么区别?
HTTP 动词中 PUT
、POST
、GET
、DELETE
和 PATCH
之间的区别:
最常用的 HTTP 动词 POST、GET、PUT、DELETE 类似于数据库中的 CRUD
(创建、读取、更新和删除)操作。我们在 capital 的情况下指定这些 HTTP 动词。所以,下面是它们之间的比较。
创建 - POST 读取 - 获取更新 - PUT 删除 - 删除
PATCH: 提交对资源的部分修改。如果您只需要更新资源的一个字段,您可能需要使用 PATCH
方法。
注意:由于 POST、PUT、DELETE 修改了内容,使用 Fiddler 对以下 url 的测试只是模仿了更新。它实际上并没有删除或修改。我们可以通过查看状态码来检查是否发生了插入、更新、删除。
网址: http://jsonplaceholder.typicode.com/posts/
得到:
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/
请求正文:
data: {
title: 'foo',
body: 'bar',
userId: 1000,
Id : 1000
}
响应:您将收到响应代码为 201。
如果我们想检查 Id = 1000 的插入记录,请将动词更改为 Get 并使用相同的 url,然后单击 Execute。
如前所述,上面的 url 只允许读取(GET),我们不能真正读取更新的数据。
3)放:
PUT
最常用于 update 功能,将请求正文放入一个已知资源 URI,其中包含原始资源的新更新表示。
使用 Fiddler 或 PostMan 检查:我们可以使用 Fiddler 来检查响应。打开 Fiddler 并选择 Compose 选项卡。如下所示指定动词和 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(无内容),没有响应正文。换句话说,没有正文的 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
以下定义来自现实世界的示例。
示例概述 对于每个客户端数据,我们存储一个标识符以查找该客户端数据,并且我们将该标识符发送回客户端以供参考。
POST 如果客户端发送的数据没有任何标识符,那么我们将存储数据并分配/生成一个新的标识符。如果客户端再次发送相同的数据而没有任何标识符,那么我们将存储数据并分配/生成一个新的标识符。注意:此处允许重复。 PUT 如果客户端发送带有标识符的数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将使用数据更新资源,否则我们将使用数据创建资源并分配/生成新标识符。 PATCH 如果客户端发送带有标识符的数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将使用数据更新资源,否则我们将抛出异常。
注意:在 PUT 方法中,如果找不到标识符,我们不会抛出异常。但是在 PATCH 方法中,如果找不到标识符,我们将抛出异常。
如果您对上述内容有任何疑问,请告诉我。
以下是对所有内容的简单描述:
POST 始终用于创建资源(是否重复无关紧要)
PUT 用于检查资源是否存在然后更新,否则创建新资源
PATCH 始终用于更新资源
PUT = 用提供的新表示替换整个资源
PATCH = 用提供的值替换部分源资源和|或更新您尚未提供的资源的其他部分(时间戳)和|或更新资源影响其他资源(关系)
最简单的解释:
POST - 创建新记录
PUT - 如果记录存在,则更新,否则创建新记录
补丁 - 更新
获取 - 阅读
删除 - 删除
这样想吧……
POST - 创建
PUT - 替换
补丁 - 更新
获取 - 阅读
删除 - 删除
请求类型
创建 - 发布
阅读 - 获取
创建或更新 - PUT
删除 - 删除
更新 - 补丁
GET/PUT 是幂等的 PATCH 有时是幂等的
什么是幂等的 - 这意味着如果我们多次触发查询,它不应该影响它的结果。(相同的输出。假设一头母牛怀孕了,如果我们再次繁殖它,那么它不会怀孕多次)
得到 :-
简单搞定。从服务器获取数据并将其显示给用户
{
id:1
name:parth
email:x@x.com
}
邮政 :-
在数据库中创建新资源。这意味着它添加了新数据。它不是幂等的。
放 :-
创建新资源,否则添加到现有资源。幂等,因为它每次都会更新相同的资源并且输出将是相同的。前任。 - 初始数据
{
id:1
name:parth
email:x@x.com
}
执行 put-localhost/1 put email:ppp@ppp.com
{
id:1
email:ppp@ppp.com
}
修补
所以现在出现了补丁请求 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?
PUT 和 PATCH 请求之间的主要区别:
假设我们有一个资源,其中包含一个人的名字和姓氏。
如果我们想更改名字,那么我们发送一个更新请求
{ "first": "Michael", "last": "Angelo" }
在这里,虽然我们只更改名字,但对于 PUT 请求,我们必须先发送和最后发送两个参数。换句话说,必须再次发送所有值,即完整的有效负载。
然而,当我们发送 PATCH 请求时,我们只发送我们想要更新的数据。换句话说,我们只发送名字来更新,不需要发送姓氏。
PUT 和 PATCH 之间的区别非常合乎逻辑,分别发送完整和部分数据以进行替换/更新。然而,只有几点如下
有时 POST 被认为是更新 wrt PUT 用于创建 HTTP 是否要求/检查在 PATCH 中发送完整数据还是部分数据?否则,PATCH 可能与 PUT/POST 中的更新完全相同