更新资源导致位置更改后的 REST 响应
REST Response after updating a resource resulting in a location change
假设我有一个用户资源 (/users/{username}
),客户端使用 PUT 来更新用户名。在这种情况下,资源的位置发生变化(因为用户名是 ID)。
这不是幂等的,因为您不能再次执行相同的请求并获得相同的结果。这是否意味着我必须改用 POST?
另外我不知道用哪个状态码来回复。
201 (created)
似乎不正确,因为资源不是创建的,只是更新的。另一方面,您必须将新位置提供给客户。
执行导致位置更改的更新的最佳做法是什么?大概是禁止吧?
拥有稳定的资源网址是一件好事。如果对资源的例行更改改变了它们的位置,这也可能对指向这些位置的其他事物不利。特别是在更改之后有 404,而不是 301 或 308 状态代码。
更改资源 URI 的最优雅的方法可能是 MOVE
HTTP 方法:
MOVE /user/foo HTTP/1.1
Destination: /user/bar
然而,尽管如此,PUT
最初 return 一个 2xx 代码并且在 404 之后立即 not 违反了幂等约束PUT
.
尽管第二个请求失败,第一个 PUT
请求后的服务器状态在第二个 PUT
请求后仍然相同。
不需要 2 个相同的幂等 HTTP 请求达到 return 相同的状态。
假设我有一个用户资源 (/users/{username}
),客户端使用 PUT 来更新用户名。在这种情况下,资源的位置发生变化(因为用户名是 ID)。
这不是幂等的,因为您不能再次执行相同的请求并获得相同的结果。这是否意味着我必须改用 POST?
另外我不知道用哪个状态码来回复。
201 (created)
似乎不正确,因为资源不是创建的,只是更新的。另一方面,您必须将新位置提供给客户。
执行导致位置更改的更新的最佳做法是什么?大概是禁止吧?
拥有稳定的资源网址是一件好事。如果对资源的例行更改改变了它们的位置,这也可能对指向这些位置的其他事物不利。特别是在更改之后有 404,而不是 301 或 308 状态代码。
更改资源 URI 的最优雅的方法可能是 MOVE
HTTP 方法:
MOVE /user/foo HTTP/1.1
Destination: /user/bar
然而,尽管如此,PUT
最初 return 一个 2xx 代码并且在 404 之后立即 not 违反了幂等约束PUT
.
尽管第二个请求失败,第一个 PUT
请求后的服务器状态在第二个 PUT
请求后仍然相同。
不需要 2 个相同的幂等 HTTP 请求达到 return 相同的状态。