我的 RESTful 服务包含一个表示项目 ACL 的资源。要更新此 ACL,客户端会PUT
使用新 ACL 作为其实体发出请求。成功后,PUT
响应实体将包含新 ACL 的经过清理的规范版本。
在大多数情况下,HTTP 响应状态码是相当明显的。 200
成功时,403
如果不允许用户编辑 ACL,400
如果新的 ACL 格式不正确,404
如果他们尝试在不存在的项目上设置 ACL,412
如果If-Match
标头不匹配,等等。
然而,在一种情况下,正确的 HTTP 状态代码并不明显。如果经过身份验证的用户使用PUT
将自己从 ACL 中删除怎么办?我们需要表明请求已成功,但他们不再有权访问该资源。
我考虑200
过在实体中使用新的 ACL返回PUT
,但这没有任何迹象表明他们不再拥有GET
该资源的能力。我考虑过直接返回403
,但这并不表示PUT
成功。我考虑过返回303
指向Location
相同的资源(后续GET
将给出 a 403
),但这似乎是303
对资源没有移动的滥用。
那么“成功,因此您不再有权访问”的正确 REST HTTP 状态代码是什么?