2017-03-17 114 views
1

我想知道在WebAPI中POST vs PUT的使用场景。我知道POST用于创建资源的基本概念,PUT用于更新资源,但不能完全理解为什么我们需要通过POST进行PUT。HTTP动词,WebAPI

我有创造2种的WebAPI方法/数据更新到我的店里SQL 1. CREATEUSER(UserDto) 2. UpdateUser两个(UserDto)

UserDto包含用户id,用户名和电子邮件。

我可以将POST用于创建用户并将其更新到我的商店的CreateUser和UpdateUser方法。

那么使用POST为CreateUser和PUT更新用户有什么好处?这仅仅是一个标准/惯例吗?

谢谢

+1

区别在于PUT是*幂等*设计。检查此标签以获取更多信息:http://stackoverflow.com/questions/tagged/idempotent+put –

+0

如果PUT在设计上是幂等的,那是因为根据HTTP规范,其URI是要创建的对象的标识符或更新(与POST相反)。 –

+0

*很多*问题的可能重复:http://stackoverflow.com/questions/tagged/post+put+rest –

回答

0

POST总是会创建新的东西。 PUT更新现有的东西。这是一个惯例。

您应该拥有:

POST/users:创建一个新用户。有效负载不应包含ID

PUT/user /(id):用有效载荷中的数据替换用户DTO。同样,有效载荷不应包含用户ID

PATCH/user /(id):更新用户的特定成员,但是id。

这是一个设计惯例,就像软件设计模式一样,可以让任何需要使用API​​的人都能轻松沟通和理解。

+1

“POST总是创造新的东西”:不一定(例如,如果有效载荷包含ID)。它依赖于API(与PUT相反,它总是幂等的,因为对象的ID是URI)。 –

+0

不应该导致HTTP 409? http://stackoverflow.com/questions/3825990/http-response-code-for-post-when-resource-already-exists – vtortola

+0

发送一个409代码确实是一种实现幂等性的方法。通过这样做,“N> 0个相同请求(在存储中)的副作用与单个请求相同”。 –

0

POST通常用于将新资源添加到资源集合中。 喜欢这个:POST /users。 此操作不是幂等的,每次调用都会产生副作用。

虽然PUT通常与替换语义一起使用,并且您知道要替换的确切资源。 喜欢这个:PUT /users/1。 此操作是幂等的,它不会对后续调用产生任何副作用。