HTTP 方法中 POST 和 PUT 的区别和适用场景是什么?(二)- 区别和总结

1,831 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

翻译自:

问题:HTTP 方法中 POST 和 PUT 的区别是什么呢?他们分别的适用场景是什么呢?

你可以在网上找到这样的断言:

  • POST用于创建资源,PUT用于修改资源
  • PUT应该用于创建资源,POST应该用于修改资源

其实两者都不完全正确。

更好的方法是根据动作的幂等性在 PUT 和 POST 之间进行选择。

上一篇文章 HTTP 方法中 POST 和 PUT 的区别和适用场景是什么?(一)- 幂等性 介绍了 幂等性(Idempotence) 的概念,说明哪些 HTTP 方法是幂等的,这篇文章会分别对PUTPOST进行分析,最后进行总结

PUT

PUT 意味着放置资源 - 用不同的内容替换给定 URL 上可用的内容。根据上一篇文章介绍的定义,PUT 方法是幂等的。即不论调用多少次,请求后的对服务端资源状态产生的效果都是相同的。你可以对一个资源进行 PUT 操作,无论它之前是否存在(创建或更新)。

所以,当你指定了资源的新 URL 时,PUT 用于创建一个资源,或者更新它。

新资源:

PUT /questions/<new_question> HTTP/1.1
Host: www.example.com/

覆盖现有资源:

PUT /questions/<existing_question> HTTP/1.1
Host: www.example.com/

POST

POST 创建一个子资源,因此 POST 到 /items 会创建一个位于 /items 资源下的资源。例如, /items/1。两次发送相同的 post 数据包将创建两个资源

POST /questions HTTP/1.1
Host: www.example.com/

总结

所以根据上面的分析,当你知道你将创建的事物的 URL 时,PUT 用于创建。当您知道要创建的事物类别的“工厂”或管理这个事物类别的 URL 时,可以使用 POST 来创建。

所以我们可以这样判断:

POST 通过服务端定义的 URL 创建资源。

POST /expense-report

PUT 通过客户端定义的 URL,创建或替换资源。

PUT  /expense-report/10929