如何使用服务器定义的 ID 构建 REST API



这是我在应用程序中创建资源的经典 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 而不是请求它的虚拟客户端。

有人可以给我一个关于这个架构问题的提示吗?

创建资源并不意味着是幂等的。如果服务器分配了 ID,则必须为要创建的每个资源选择不同的 ID。此类操作不得是幂等的,重复此操作必须创建不同的资源。

对收集资源使用POST,如

POST /users

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

仅当问题域允许客户端控制 ID 时,才使用幂等操作(如 PUT(创建资源才有意义。我认为对于大多数领域来说,情况并非如此。

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

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

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

此外:

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

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

POST /users
PUT /users/id

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

PUT /users

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

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

最新更新