假设我有一个用户资源(/users/{username}
),并且客户端使用PUT来更新用户名。在这种情况下,资源的位置会更改(因为用户名是ID)。
这不是幂等的,因为您不能再次执行相同的请求并获得相同的结果。这是否意味着我必须改用POST?
另外,我不知道要回复哪个状态码。201 (created)
似乎不正确,因为没有创建资源,只是更新了资源。另一方面,您必须将新位置提供给客户端。
执行导致位置更改的更新的最佳实践是什么?可能禁止吗?
拥有稳定的资源url是一件好事。如果对资源的例行更改会更改其位置,则这对于指向这些位置的其他事物也可能是不利的。尤其是在更改之后,将显示404,而不是301或308状态代码。
更改资源URI的最优雅的方法可能是MOVE
HTTP方法:
MOVE /user/foo HTTP/1.1
Destination: /user/bar
然而,尽管如此,PUT
最初返回了2xx代码,并且在404之后立即不是违反了PUT
的幂等约束。
尽管第二个请求失败,但是在第二个PUT
请求之后,服务器的状态仍然相同。
并不需要两个相同的幂等HTTP请求返回相同的状态。