首页 > 解决方案 > 更新资源导致位置更改后的 REST 响应

问题描述

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

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

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

执行更新导致位置更改的最佳做法是什么?大概是禁止吧?

标签: resthttp-headersputhttp-status-codeshttp-method

解决方案


拥有稳定的资源网址是一件好事。如果对资源的例行更改更改了它们的位置,那对于指向这些位置的其他东西也可能是不利的。尤其是在更改之后有 404,而不是 301 或 308 状态代码。

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

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

但是,尽管如此,PUT最初返回 2xx 代码并且紧跟在 404 之后并不违反PUT.

尽管第二次请求失败,但在第一次请求后服务器的状态在PUT第二次请求后仍然相同PUT

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


推荐阅读