更新资源后导致位置更改的REST响应

问题描述 投票:-1回答:1

假设我有一个用户资源(/users/{username}),并且客户端使用PUT来更新用户名。在这种情况下,资源的位置会更改(因为用户名是ID)。

这不是幂等的,因为您不能再次执行相同的请求并获得相同的结果。这是否意味着我必须改用POST

另外,我不知道要回复哪个状态码。201 (created)似乎不正确,因为没有创建资源,只是更新了资源。另一方面,您必须将新位置提供给客户端。

执行导致位置更改的更新的最佳实践是什么?可能禁止吗?

rest http-headers put http-status-codes http-method
1个回答
0
投票

拥有稳定的资源url是一件好事。如果对资源的例行更改会更改其位置,则这对于指向这些位置的其他事物也可能是不利的。尤其是在更改之后,将显示404,而不是301或308状态代码。

更改资源URI的最优雅的方法可能是MOVE HTTP方法:

MOVE /user/foo HTTP/1.1
Destination: /user/bar

然而,尽管如此,PUT最初返回了2xx代码,并且在404之后立即不是违反了PUT的幂等约束。

尽管第二个请求失败,但是在第二个PUT请求之后,服务器的状态仍然相同。

并不需要两个相同的幂等HTTP请求返回相同的状态。

© www.soinside.com 2019 - 2024. All rights reserved.