|
|
1
20
使用put创建资源的缺点是客户端必须提供 表示正在创建的对象的唯一ID。而对客户来说 为了生成这个唯一的id,大多数应用程序设计人员希望他们的服务器(通常 通过他们的数据库)创建这个id。 我们的服务器控制资源ID的生成。那我们该怎么办?我们可以交换 使用post而不是put。 所以: 放置=更新 post=插入 |
|
|
2
16
使用post作为insert和put作为update的原因是post是 nonidempotent 以及根据http的不安全操作。等幂意味着不管你应用这个操作多少次,结果总是一样的。在sql中,insert是唯一的非等幂操作,因此它应该映射到post上。更新是等幂的,所以它可以在放置时映射。这意味着同一个put/update操作可能会应用多次,但只有在第一次应用时才会更改系统/数据库的状态。 因此,使用put for insert将打破http语义的要求,即put操作必须是等幂的。 |
|
|
3
6
动词是:
当我们想要创造一个新的资源时,我们可以使用
|
|
|
4
5
当服务器授予客户端对其部分uri空间的控制权时,可以使用put进行创建。这相当于在文件系统中创建文件:当您保存到一个尚不存在的文件时,您将创建该文件,如果该文件存在,则结果是更新。 然而,看跌期权缺乏客户隐含意图的能力。考虑下订单:如果您下的是/orders/my new order,意思只能是更新/orders/my new order标识的资源,而post/orders/可以是“下一个新订单”,如果post-accepting资源具有适当的语义。 听着,如果你想在创建新资源的过程中获得任何副作用,你必须使用post。 简 |
|
|
5
2
我们使用post=create,put=update。 为什么?没有 好的 原因。我们得选一个,这就是我的选择。 编辑 . 看看其他的答案,我意识到关键的创作问题可能会做出决定。 我们发布新的条目并返回一个带有生成的键的json对象。这似乎更适合于普遍接受的post语义。 我们使用标识对象的完整uri放入现有条目。 |
|
|
6
2
在这里 http://www.w3.org/Protocols/rfc2616/rfc2616.html 是如何实现http方法行为的官方指南。 |
|
|
7
1
我最近一直在研究rest的概念和实现,一般的共识似乎是:put用于创建/更新,这取决于资源是否已经存在。post用于将资源附加到集合。 参见http/1.1方法定义 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
也可参见 Understanding REST: Verbs, error codes, and authentication . |