哪个惯例是“正确的”

我很好地实现了一个REST服务(在Windows CE平台上,如果这很重要),我开始使用IBM的通用定义来使用POST来创建(INSERT)和PUT来进行更新。

现在我已经遇到了与Sun的定义完全相反的定义。 所以我的问题是,这是“普遍接受的”定义? 或者甚至有一个?


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

所以:Put = UPDATE

Post = INSERT


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

因此,对于INSERT使用PUT将打破HTTP语义需求,即PUT操作必须是幂等的。


这些动词是:

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

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

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

POST {path} :调用{path}标识的动作。

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

链接地址: http://www.djcxy.com/p/45345.html

上一篇: which convention is "correct"

下一篇: REST API using POST instead of GET