HTTP协议中的PUT、POST和PATCH方法有什么区别?
当前回答
下面的定义来自真实世界的例子。
示例概述 对于每个客户端数据,我们存储一个标识符来查找客户端数据,并将该标识符发送回客户端以供参考。
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方法中,如果没有找到标识符,则抛出异常。
如果您对上述内容有任何疑问,请告诉我。
其他回答
参考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
程序员们好运!: -)
你可能会把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] |
下面的定义来自真实世界的例子。
示例概述 对于每个客户端数据,我们存储一个标识符来查找客户端数据,并将该标识符发送回客户端以供参考。
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方法中,如果没有找到标识符,则抛出异常。
如果您对上述内容有任何疑问,请告诉我。
请求类型
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 - create
PUT -替换
补丁-更新
GET - read
DELETE -删除
推荐文章
- 有没有办法在python中做HTTP PUT
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?
- 什么是http头“X-XSS-Protection”?
- 在nodejs http中body在哪里。得到回应?
- HTTP请求在Swift与POST方法
- Ruby:如何将散列转换为HTTP参数?
- 在用nodejs和express创建的REST API中设置响应状态和JSON内容的正确方法
- HTTP 1.1和HTTP 2.0的区别是什么?
- 什么是“升级-不安全-请求”HTTP报头?
- HTTP 301和308状态码有什么区别?
- 什么HTTP状态码应该用于错误的输入
- 编排microservices
- 如何使HTTP请求在PHP和不等待响应
- PATCH和PUT请求的主要区别是什么?
- 我可以把我所有的http://链接都改成//吗?