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


当前回答

参考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

程序员们好运!: -)

其他回答

这样想吧……

POST - create

PUT -替换

补丁-更新

GET - read

DELETE -删除

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

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]