asp.net mvc 和 web api 哪个更好 Http POST 或 PUT

Posted

技术标签:

【中文标题】asp.net mvc 和 web api 哪个更好 Http POST 或 PUT【英文标题】:asp.net mvc and web api which is better Http POST or PUT 【发布时间】:2014-10-17 02:23:06 【问题描述】:

我有一个 asp.net mvc 和 web api 类型的应用程序。 我对 http post 和 http put 有点困惑。 什么时候用什么,各有什么优缺点。 我浏览了许多博客,但没有充分的理由说明设计的目的。

【问题讨论】:

***.com/questions/107390/… 【参考方案1】:

使用POST,您必须从头开始创建全新的记录。 使用PUT 来更新数据库中的现有记录

这里是 PUT 和 POST 之间的区别

   `POST is Not idempotent`--> 

意味着一次又一次地运行 POST 操作将在每次运行调用时创建新实例。

`PUT is Idempotent`--> 

PUT 是幂等操作,一次又一次调用 PUT 将产生相同的结果。

所以 POST 不是幂等的,而 PUT 是幂等的。

`There is also PATCH` -->

当您只需要更新模型的少数属性时使用补丁。换句话说,部分更新。

【讨论】:

【参考方案2】:

简单地说(没有双关语):

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(这也意味着我们必须更改正在使用它的客户端(移动应用程序)) .

【讨论】:

以上是关于asp.net mvc 和 web api 哪个更好 Http POST 或 PUT的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc+web api+easyui

AngularJS + ASP.NET Web API + ASP.NET MVC 身份验证

ASP.NET MVC Web.Api 路由 - 真实世界示例

了解 ASP.NET(MVC、Web API)中的令牌生成/验证

Asp.net MVC 与 Asp.net Web API 区别

ASP.NET MVC 4 Web API