这是在应用程序中创建资源的经典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匹配:
如果使用POST来创建资源,则会失去幂等性:REST隐含PUT,GET,DELETE idempotency,而POST则不然.
在进行PUT之前,您可以要求服务器为您提供一个很好的ID.尽管它感觉非常沉重且不明显,但它也不能保护使用自己的随机ID而不是要求它的虚拟客户端.
有人能在这个架构问题上给我一个暗示吗?
使用资源创建并不意味着是幂等的.如果服务器分配ID,则必须为要创建的每个资源选择不同的ID.这样的操作不能是幂等的,重复它必须创建不同的资源.
像对象一样使用POST
collecton资源
POST /users
如果服务器分配ID,则完全是RESTful.可以重复此请求,它将创建不同的资源.
PUT
如果问题域允许客户端控制ID,则使用像创建资源这样的幂等操作才有意义.我认为对大多数域名来说并非如此.
我的建议:使用POST
并让服务器分配ID.