【发布时间】:2019-12-15 16:40:34
【问题描述】:
假设我有一个用户资源 (/users/{username}),客户端使用 PUT 更新用户名。在这种情况下,资源的位置会发生变化(因为用户名是 ID)。
这不是幂等的,因为您不能再次执行相同的请求并获得相同的结果。这是否意味着我必须改用 POST ?
另外,我不知道用哪个状态码回复。
201 (created) 似乎不正确,因为资源没有创建,只是更新了。另一方面,您必须将新位置提供给客户。
执行更新导致位置更改的最佳做法是什么?大概是为了禁止吧?
【问题讨论】:
-
见tools.ietf.org/html/rfc7231#section-4.3.4;如果通过 PUT 更改资源的 location 意味着同一资源的后续 GET 将 404(或者更糟糕的是,成功但对于不同的资源),这在语义上似乎不正确。如果你有一个 3xx 可能没问题。
-
是的,我完全同意你的看法,但这就是我的问题的重点。如何让用户更改用户名,同时仍然遵循 REST 原则而不使用代理键?
标签: rest http-headers put http-status-codes http-method