这是我在应用程序中创建资源的经典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:
有人可以在这个架构问题上给我一个暗示吗?
答案 0 :(得分:5)
创建资源并不意味着是幂等的。如果服务器分配ID,则必须为要创建的每个资源选择不同的ID。这样的操作不能是幂等的,重复它必须创建一个不同的资源。
对
中的collecton资源使用POST
POST /users
如果服务器分配ID,则完全是RESTful。此请求可以重复,它将创建不同的资源。
如果问题域允许客户端控制ID,则使用PUT
之类的幂等操作来创建资源才有意义。我认为对大多数域名来说并非如此。
我的建议:使用POST
并让服务器分配ID。
答案 1 :(得分:1)
实际上,当您阅读RESTful最佳实践时,您可以找到:
POST动词最常用于创建新资源。
另外:
在客户端而不是服务器选择资源ID的情况下,PUT也可用于创建资源。
答案 2 :(得分:0)
在REST环境中,您发送POST以创建资源,并且可以返回服务器生成的ID,以便在使用PUT或PATCH之后发送值。
POST /users
PUT /users/id
此外,人们使用客户端生成的ID
通过PUT创建资源PUT /users
但我认为最好的方法是使用服务器生成的ID与POST。
以下是一个明确的解释:http://www.restapitutorial.com/lessons/httpmethods.html