REST动词 - 哪个约定是"正确的"

cta*_*cke 20 asp.net rest web-services

我很擅长实现REST服务(如果重要的话,在Windows CE平台上),我开始使用IBM的一般定义,即使用POST创建(INSERT)和PUT进行更新.

现在我遇到了Sun的定义,恰恰相反.所以我的问题是,"普遍接受的"定义是什么?或者甚至有一个?

Cri*_*riu 20

使用PUT创建资源的缺点是客户端必须提供表示它正在创建的对象的唯一ID.虽然客户端通常可以生成此唯一ID,但大多数应用程序设计人员更喜欢他们的服务器(通常通过其数据库)创建此ID.在大多数情况下,我们希望服务器控制资源ID的生成.那么我们该怎么办?我们可以切换到使用POST而不是PUT.

所以:Put = UPDATE

Post = INSERT


Vol*_*lov 16

使用POST作为INSERT和PUT作为UPDATE的原因是POST是根据HTTP 的唯一非且不安全的操作.幂等意味着无论您应用多少次操作,结果总是相同的.在SQL中,INSERT是唯一的非幂等操作,因此它应该映射到POST.UPDATE是幂等的,因此它可以映射到PUT上.这意味着可以应用相同的PUT/UPDATE操作多次,但只有第一次将改变我们的系统/数据库的状态.

因此,使用PUT进行INSERT将破坏HTTP语义的要求,即PUT操作必须是幂等的.


yfe*_*lum 6

动词是:

GET {path}:检索标识符为的资源{path}.

PUT {path}:创建或更新标识符为的资源{path}.

DELETE {path}:删除标识符为的资源{path}.

POST {path}:调用由其标识的操作{path}.

当打算创建新资源时,PUT如果我们知道资源的标识符应该是什么,我们就可以使用,POST如果我们希望服务器确定新资源的标识符,我们就可以使用.


Jan*_*sen 5

当服务器在其URI空间的一部分上授予客户端控制权时,PUT可用于创建.这相当于文件系统中的文件创建:当您保存到尚不存在的文件时,您可以创建它,如果该文件存在,则结果是更新.

但是,PUT缺乏客户端隐含意图的能力.考虑下订单:如果您输入/ orders/my-new-order,则意义只能更新/ orders/my-new-order标识的资源,而POST/orders /可能意味着'下新订单'如果POST接受资源具有适当的语义.

IOW,如果你想实现任何创建新资源的副作用,你必须使用POST.

一月