我的 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 状态代码是什么?