我只是想在接受的答案中添加一些内容,因为他的定义http verbs
不正确。它们都有一个“应该”遵循的规范,您可以http verbs
根据规范创建/更新/删除多个。
我将重点介绍W3 的 RFC 2616中的一些重要部分
我要开始,PUT
因为在我看来,它周围最混乱。
PUT is used for both create/update PUT updates by completely replacing the resource on the server with the resource sent in the request
例如
你打电话给我的 api
PUT /api/person
{
Name: John,
email: jdoe@hra.com
}
我的服务器有这个资源存在于服务器上
{
Name: Jane,
email: jdoe@hra.com
}
现在我现有的资源完全被您发送的资源所取代,这就是我在服务器上拥有的资源。
{
Name: John,
email: jdoe@hra.com
}
因此,如果您PUT
仅在正文中发送电子邮件
PUT /api/person
{
email: jdoe@hra.com
}
我的服务器将完全替换实体
{
Name: Jane,
email: jdoe@hra.com
}
和
{
email: jdoe@hra.com
}
名称将消失。部分更新是用于PATCH
但我POST
无论如何都使用它。
One of the main reasons why we create/update with put is because it is idempotent.
这只是一个花哨的术语,它的基本定义是多个相同的请求对于单个请求是相同的。
例子
假设我PUT
有一个文件,api/file
如果源服务器找不到该文件,它将创建一个。如果它确实找到了一个文件,它将用我发送的文件完全替换旧文件。这确保了一个文件被创建和更新。如果不存在文件并且您调用PUT
了 5 次,则第一次创建文件,然后其他 4 次将文件替换为您发送的文件。如果您调用POST
5 次来创建它将创建 5 个文件。
You PUT to that exact URI. If you don't you have to send a 301 (Moved Permanently) to the user and allow then make a choice whether or not to redirect the request. Most times the server you PUT to usually hosts the resource and takes care of updating it
这些是何时使用 PUT 的要点
就POST
目前而言
You can also create/update and then some...
正如我上面提到的,有一些关键的区别。
- 帖子比较一般。以什么方式?其他一些示例包括通往其他协议的网关,它可以接收响应并将其发送到位于中间的某个数据处理程序,或者它可以扩展某种功能。
- Post 没有“到确切的 URI 或通知”的限制,例如
POST
可以将资源附加到现有集合并决定它的存储位置。
现在我Delete
为什么不POST
呢?
当您发送响应时,除非您删除资源或将其移动到无法访问的位置,否则DELETE
服务器不应成功响应。
为什么这很重要?如果您调用DELETE
但资源在被删除之前必须经过“批准”怎么办?如果删除可以被拒绝,则您无法发送成功的错误代码,并且如果您确实遵循了基本规范,那么调用者会感到困惑。只是一个例子,我相信你可以想到很多其他的。
我只是强调了一些关于何时使用通用的要点Http verbs