HTTP协议中的PUT、POST和PATCH方法有什么区别?
HTTP中PUT、POST、GET、DELETE、PATCH的区别:
最常用的HTTP动词POST, GET, PUT, DELETE类似于数据库中的CRUD(创建,读取,更新和删除)操作。我们用大写字母指定这些HTTP动词。所以,下面是他们之间的比较。
Create - POST 阅读-获取 更新- PUT 删除-删除
PATCH:向资源提交部分修改。如果您只需要更新资源的一个字段,您可能需要使用PATCH方法。
注意: 由于POST、PUT、DELETE会修改内容,因此使用Fiddler对下面url进行的测试只是模拟更新。它实际上没有删除或修改。我们可以只查看状态码,以检查是否发生了插入、更新和删除。
URL: http://jsonplaceholder.typicode.com/posts/
得到:
GET是最简单的HTTP请求方法;每次你点击链接或在地址栏中输入URL时,浏览器都会使用它。它指示服务器将URL标识的数据传输到客户端。永远不要因为GET请求而在服务器端修改数据。从这个意义上说,GET请求是只读的。
向小提琴手或邮差查询: 我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。 如下所示指定动词和url,然后单击Execute检查响应。
动词:
url: 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动词主要用于创建新资源。特别是,它用于创建下级资源。也就是说,从属于其他资源(例如父资源)。
在成功创建时,返回HTTP状态201,返回一个Location头,其中包含指向新创建的HTTP状态201的资源的链接。
向小提琴手或邮差查询: 我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。 如下所示指定动词和url,然后单击Execute检查响应。
动词:文章
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最常用于更新功能,放置到一个已知资源URI,其中请求体包含原始资源的最新更新表示。
向小提琴手或邮差查询: 我们可以使用Fiddler来检查响应。打开Fiddler并选择Compose选项卡。 如下所示指定动词和url,然后单击Execute检查响应。
动词:
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来检查响应。打开Fiddler并选择Compose选项卡。 如下所示指定动词和url,然后单击Execute检查响应。
动词:删除
url: http://jsonplaceholder.typicode.com/posts/1
响应:在成功删除时,它返回HTTP状态200 (OK)以及响应体。
PUT和PATCH之间的示例
PUT
如果我不得不改变我的名字,然后发送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 =用所提供的新表示替换整个RESOURCE
PATCH =用所提供的值替换源资源的部分和|或资源的其他部分被更新,你没有提供(时间戳)和|或更新资源影响其他资源(关系)
https://laracasts.com/discuss/channels/general-discussion/whats-the-differences-between-put-and-patch?page=1
请求类型
create - POST read - GET create或update - PUT delete -删除 update - PATCH
GET/PUT是等幂的 PATCH有时是等幂的
什么是幂等的 这意味着如果我们多次触发查询,它不应该影响查询的结果。(相同的输出。假设一头牛怀孕了,如果我们再次繁殖它,那么它就不能怀孕多次)
得到:
简单的会。从服务器获取数据并显示给用户
{
id:1
name:parth
email:x@x.com
}
职位:
在数据库中创建新资源。这意味着它会添加新的数据。它不是等幂的。
将:-
创建新资源,否则添加到现有资源。 幂等的,因为它每次都会更新相同的资源,输出也会相同。 前女友。 -初始数据
{
id:1
name:parth
email:x@x.com
}
执行put-localhost / 1 把电子邮件: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
资源: 幂等性——什么是幂等性?
下面的定义来自真实世界的例子。
示例概述 对于每个客户端数据,我们存储一个标识符来查找客户端数据,并将该标识符发送回客户端以供参考。
POST If the client sends data without any identifier, then we will store the data and assign/generate a new identifier. If the client again sends the same data without any identifier, then we will store the data and assign/generate a new identifier. Note: Duplication is allowed here. PUT If the client sends data with an identifier, then we will check whether that identifier exists. If the identifier exists, we will update the resource with the data, else we will create a resource with the data and assign/generate a new identifier. PATCH If the client sends data with an identifier, then we will check whether that identifier exists. If the identifier exists, we will update the resource with the data, else we will throw an exception.
注意:在PUT方法中,如果没有找到标识符,我们不会抛出异常。但是在PATCH方法中,如果没有找到标识符,则抛出异常。
如果您对上述内容有任何疑问,请告诉我。
PUT和PATCH请求的主要区别:
假设我们有一个资源,其中包含一个人的姓和名。
如果我们想要改变名字,那么我们发送一个put请求Update
{"第一个":"迈克尔","最后一个":"安吉洛"}
在这里,虽然我们只改变了名字,但是对于PUT请求,我们必须在第一个和最后一个发送参数。 换句话说,必须再次发送所有值,即完整的有效负载。
然而,当我们发送PATCH请求时,我们只发送我们想要更新的数据。换句话说,我们只发送名字来更新,不需要发送姓氏。
PUT和PATCH w.r.t分别发送完整和部分数据进行替换/更新之间的差异非常符合逻辑。但是,我只提出以下几点
有时POST被认为是用于更新w.r.t PUT用于创建 HTTP是否要求/检查在PATCH中发送完整数据还是部分数据?否则PATCH可能与PUT/POST中的update完全相同
你可能会把restful HTTP方法理解为javascript中对数组的相应操作(索引偏移量为1)。
请看下面的例子:
Method | Url | Meaning |
---|---|---|
GET | /users | return users array |
GET | /users/1 | return users[1] object |
POST | /users | users.push(body) ; return last id or index |
PUT | /users | replace users array |
PUT | /users/1 | users[1] = body |
PATCH | /users/1 | users[1] = {...users[1], ...body } |
DELETE | /users/1 | delete users[1] |
参考RFC: https://www.rfc-editor.org/rfc/rfc9110.html#name-method-definitions
POST -创建新对象 PUT -更新旧对象或创建新对象(如果不存在) 更新/修改旧对象。主要用于修改。
之前提到的RFC的解释很少,但如果你仔细阅读,你会注意到PUT和PATCH方法是在POST之后出现的,这是一种常见的创建原生HTML表单的老式方法。
因此,如果你试图支持所有的方法(如PATCH或DELETE),可以建议使用所有方法的最合适的方法是坚持CRUD模型:
Create - PUT 阅读-获取 更新-补丁 删除-删除
旧的HTML原生方式: 阅读-获取 创建/更新/删除- POST
程序员们好运!: -)
推荐文章
- 什么是“升级-不安全-请求”HTTP报头?
- HTTP 301和308状态码有什么区别?
- 什么HTTP状态码应该用于错误的输入
- 编排microservices
- 如何使HTTP请求在PHP和不等待响应
- PATCH和PUT请求的主要区别是什么?
- 我可以把我所有的http://链接都改成//吗?
- URL为AJAX请求编码一个jQuery字符串
- 编译System.Net.HttpClient的查询字符串
- 摘要认证和基本认证的区别是什么?
- Axios -删除请求与请求体和头?
- 如何在http获取请求设置报头?
- 如何使用Ruby on Rails进行HTTP请求?
- REST API最佳实践:查询字符串中的参数vs请求体中的参数
- Express.js中的res.send和res.json的区别