3

这是我在应用程序中创建资源的经典 RESTful 方式:

# This creates user. Client is responsible to create UUID, which is simple
PUT /users/CLIENT_GENERATED_UUID
# Access user by uuid
GET /users/UUID

当我们触及数据存储性能领域时,会发现随机生成的 UUID 不能很好地服务于数据局部性等许多原因。

服务器生成的 ID 对性能有好处,但它们并不真正匹配 REST:

  1. 如果使用 POST 创建资源,就会失去幂等性:REST 隐含 PUT、GET、DELETE 幂等性,而 POST 则没有。
  2. 在执行 PUT 之前,您可以要求服务器为您提供一个不错的 ID。尽管它感觉很重且不明显,但它也不能防止使用自己的随机 id 而不是要求它的虚拟客户端。

有人可以在这个架构问题上给我一个提示吗?

4

3 回答 3

6

使用创建资源并不意味着是幂等的。如果服务器分配 ID,它必须为要创建的每个资源选择不同的 ID。这样的操作不能是幂等的,重复它必须创建不同的资源。

POST对收集资源使用,如

POST /users

如果服务器分配 ID,则完全是 RESTful。可以重复此请求,它将创建不同的资源。

仅当问题域允许客户端控制 ID 时,使用像PUT创建资源这样的幂等操作才有意义。我认为这对于大多数领域来说都是不正确的。

我的建议:使用POST并让服务器分配 ID。

于 2015-01-08T14:27:26.940 回答
1

实际上,当您阅读 RESTful 最佳实践时,您会发现:

POST 动词最常用于创建新资源。

除了:

在客户端而不是服务器选择资源 ID 的情况下,PUT 也可用于创建资源。

于 2015-01-08T15:12:45.260 回答
0

在 REST 环境中,您发送 POST 以创建资源,并且可以返回服务器生成的 ID 以使用 PUT 或 PATCH 发送值。

POST /users
PUT /users/id

此外,人们使用客户端生成的 ID 使用 PUT 创建资源

PUT /users

但我认为最好的方法是使用服务器生成的 ID 和 POST。

这里有一个明确的解释:http ://www.restapitutorial.com/lessons/httpmethods.html

于 2015-01-08T14:44:44.773 回答