如何使用服务器定义的ID构建RESTAPI?
这是创建应用程序中资源的经典RESTful方法:如何使用服务器定义的ID构建RESTAPI?,api,rest,idempotent,Api,Rest,Idempotent,这是创建应用程序中资源的经典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不匹配: 如果使
# 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不匹配:
有人能在这个架构问题上给我一个提示吗?使用创建资源并不意味着是幂等的。如果服务器分配ID,则必须为要创建的每个资源选择不同的ID。这样的操作不能是幂等的,重复它必须创建不同的资源 对collecton资源使用
POST
,如中所示
POST /users
如果服务器分配ID,则为完全RESTful。此请求可以重复,并将创建不同的资源
只有当问题域允许客户端控制ID时,使用诸如PUT
之类的幂等运算来创建资源才有意义。我认为对于大多数域来说,这是不正确的
我的建议是:使用
POST
并让服务器分配ID。在REST环境中,您可以发送POST来创建资源,并可以返回服务器生成的ID,然后使用PUT或PATCH发送值
POST /users
PUT /users/id
此外,人们使用客户机生成的ID使用PUT创建资源
PUT /users
但我认为最好的方法是使用服务器生成的ID和POST
这里有一个明确的解释:实际上,当您阅读RESTful最佳实践时,您会发现: POST动词最常用于创建新资源 除此之外: 如果资源ID由客户端而不是服务器选择,则PUT还可用于创建资源
你能提供这个报价的来源吗?但我可能引用了这个文件的不同版本,因为我当时使用的是不同的笔记本电脑。。。