【发布时间】:2014-10-17 02:23:06
【问题描述】:
我有一个 asp.net mvc 和 web api 类型的应用程序。 我对 http post 和 http put 有点困惑。 什么时候用什么,各有什么优缺点。 我浏览了许多博客,但没有充分的理由说明设计的目的。
【问题讨论】:
标签: asp.net asp.net-mvc http-post asp.net-web-api http-put
我有一个 asp.net mvc 和 web api 类型的应用程序。 我对 http post 和 http put 有点困惑。 什么时候用什么,各有什么优缺点。 我浏览了许多博客,但没有充分的理由说明设计的目的。
【问题讨论】:
标签: asp.net asp.net-mvc http-post asp.net-web-api http-put
使用POST,您必须从头开始创建全新的记录。
使用PUT 来更新数据库中的现有记录
这里是 PUT 和 POST 之间的区别
`POST is Not idempotent`-->
意味着一次又一次地运行 POST 操作将在每次运行调用时创建新实例。
`PUT is Idempotent`-->
PUT 是幂等操作,一次又一次调用 PUT 将产生相同的结果。
所以 POST 不是幂等的,而 PUT 是幂等的。
`There is also PATCH` -->
当您只需要更新模型的少数属性时使用补丁。换句话说,部分更新。
【讨论】:
简单地说(没有双关语):
POST 通常用于创建新对象。
PUT 通常用于更新现有对象
使用正确的 HTTP 动词可以让您发布更简洁的 API,并且无需在端点 (url) 内编码意图。例如,比较:
使用正确的动词:
GET api/user/12345
POST api/user/12345
PUT api/user/12345
DELETE api/user/12345
破解端点:
GET api/user/12345
POST api/user/12345/create
POST api/user/12345/update
POST api/user/12345/delete
我认为使用PUT 等的唯一缺点是并非所有开发人员都熟悉它们,并且某些第三方软件可能不支持它们,或者至少它可能不像使用那么容易像GET & POST 这样更熟悉的动词。
例如,几周前我遇到了一个问题,当时我在 API 即将上线之前放置了一个代理,并且代理不支持 HTTP PUT 动词(可能是配置问题 - 但是我们无法访问代理来修复它)所以我们不得不调整 API 并在最后一分钟将其更改为POST(这也意味着我们必须更改正在使用它的客户端(移动应用程序)) .
【讨论】: