HTTP PUT 插入和标识

HTTP PUT insert and identity

据我了解,PUT 可用于插入或修改现有记录。

PUT to a URL creates/replaces the resource in its entirety at the client defined URL.

PUT: www.domain.com/accounts/1
{
  Name: "Some Name"
}

以下请求将创建 ID 为 1 的帐户,但在下一个请求中它将只是 update/replace ID 为 1 的帐户,这使其具有幂等性。

这如何与关系数据库或支持自动生成标识的任何其他数据库中的标识列一起使用?

如果我的帐户有自动生成的 SQL 标识列,我应该使用 属性 而不是主键来标识数据库中的资源,还是 return 完全没问题请求不存在的资源时找不到资源错误?

首先,我将使用 POST 而不是 PUT 来创建新资源。

其次,使用 DB PK 作为资源唯一标识符很好,尽管在某些情况下您可能希望使用 guid 来支持该列(假设您正在实施凭证系统并且不希望用户尝试通过增加凭证 ID 来破解它 - 你只会公开凭证 guid)。

至于实际的 id,我认为你可以从初始 POST 有效载荷中省略它 - 它只是一个实现细节,数据库是唯一应该生成它的,它会得到在那个(和进一步的)请求的响应中返回。