HTTP协议中PUT、POST和PATCH方法有什么区别?
HTTP协议中PUT、POST和PATCH方法有什么区别?
HTTP动词PUT、POST、GET、DELETE和PATCH之间的区别:
最常用的HTTP动词POST、GET、PUT、DELETE类似于数据库的CRUD(创建、读取、更新和删除)操作。我们使用大写字母来指定这些HTTP动词。下面是它们之间的比较:
PATCH:提交对资源的部分修改。如果只需要更新资源的一个字段,则可以使用PATCH
方法。
注意:
由于POST、PUT、DELETE会修改内容,因此在下面的URL上使用Fiddler测试只是模拟更新,实际上并不会进行删除或修改。我们只能通过查看状态码来检查是否发生插入、更新或删除。
URL: http://jsonplaceholder.typicode.com/posts/
GET
是最简单的HTTP请求方法;每次单击链接或在地址栏中输入URL时,浏览器都会使用它。它指示服务器将由URL标识的数据传输到客户端。数据不应该被修改,因为GET
请求是只读的。
使用Fiddler或PostMan进行检查:我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。指定动词和URL,如下所示,然后单击Execute以检查响应。
Verb: GET
url: http://jsonplaceholder.typicode.com/posts/
Response: 您将获得以下响应:
"userId": 1, "id": 1, "title": "sunt aut...", "body": "quia et suscipit..."
在“成功”(或无错误)路径中,GET会返回XML或JSON表示形式以及HTTP响应代码200(OK)。在错误情况下,它通常返回404(未找到)或400(错误请求)。
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,然后单击执行。
如前所述,上述URL仅允许读取(GET),我们无法实时读取更新后的数据。
3) PUT:
PUT
通常用于更新功能,将请求正文放置在已知资源URI中的PUT,其中包含原始资源的新更新表示。
使用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:
DELETE
非常容易理解。它用于删除由URI标识的资源。
如果删除成功,则返回HTTP状态码200(OK)以及响应主体,可能是已删除项的表示(通常需要太多带宽),或包装响应(请参见下面的返回值)。 或者,返回没有响应主体的HTTP状态码204(NO CONTENT)。换句话说,建议使用没有主体的204状态,或JSEND风格的响应和HTTP状态码200。
使用Fiddler或PostMan检查: 我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。 按照下面所示指定动词和URL,然后单击Execute以检查响应。
动词:DELETE
URL: http://jsonplaceholder.typicode.com/posts/1
响应:如果成功删除,则返回HTTP状态码200(OK)以及响应主体。
PUT和PATCH之间的示例
PUT
如果我必须更改我的名字,则发送PUT
请求进行更新:
{ "first": "Nazmul", "last": "hasan" }
因此,为了更新名字,我们需要再次发送所有数据的参数。
PATCH:
PATCH请求表示我们只发送需要修改的数据,而不修改或影响其他数据的部分。 例如:如果我们只需要更新名字,我们只传递名字。
更多信息,请参考以下链接:
title=foo&body=bar&userid=1000&id=1000
。 - Shayan如果你对上述内容有任何疑问,请告诉我。
以下是所有内容的简单描述:
PUT = 使用提供的新表示形式替换整个资源
PATCH = 用提供的值替换源资源的部分内容,并可能更新您未提供的其他部分的资源(时间戳),并且|或更新资源会影响其他资源(关系)
简单解释:
POST - 创建新的记录
PUT - 如果记录存在则更新,否则创建新的记录
PATCH - 更新
GET - 读取
DELETE - 删除
这样来想...
POST - 创建
PUT - 替换
PATCH - 更新
GET - 读取
DELETE - 删除
GET/PUT是幂等的(idempotent)
PATCH有时也可以是幂等的
什么是幂等性 - 它意味着如果我们多次发出同一个查询,它不应该影响其结果。(相同输出。假设一头母牛怀孕了,如果我们再次配种它,则不能使其多次怀孕)
get
:-简单获取。从服务器获取数据并向用户显示。
{
id:1
name:parth
email:x@x.com
}
post
:-在数据库中创建新资源。它意味着添加新数据。它不是幂等的。
put
:-创建新资源或添加到现有资源。 是幂等的,因为每次都会更新相同的资源并输出相同的结果。 例如: - 初始数据
{
id:1
name:parth
email:x@x.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方法 GET:是的 POST:不是 PUT:是的 PATCH:不是* OPTIONS:是的 HEAD:是的 DELETE:是的 资源: 幂等性--什么是幂等性?
{ "first": "Michael", "last": "Angelo" }
参考 RFC:https://www.rfc-editor.org/rfc/rfc9110.html#name-method-definitions
POST - 创建新对象
PUT - 更新旧对象或如果不存在则创建新对象
PATCH - 更新/修改旧对象。主要用于修改。
正如之前提到的,RFC有几种解释,但是如果仔细阅读,您会注意到PUT和PATCH方法在POST之后出现,这是创建本地HTML表单的常见老式方式。
因此,如果您尝试支持所有方法(例如PATCH或DELETE),则可以建议使用CRUD模型的最合适方法:
Create - PUT
Read - GET
Update - PATCH
Delete - DELETE
旧的HTML本地方式:
读取 - GET
创建/更新/删除 - POST
祝编程者好运!;-)
PUT和PATCH在替换/更新时发送完整数据和部分数据之间的区别是非常逻辑的。然而,以下只有几点需要注意: