REST-API,无效删除的正确HTTP状态代码
我正在设计一个RESTful API,它使用HTTP状态代码和谓词作为通信中的关键组件 在宗教层面上,它是站在RESTafarian的狂热者一边 确定HTTP状态代码的经验法则已被使用,或类似资源REST-API,无效删除的正确HTTP状态代码,api,http,rest,permissions,http-error,Api,Http,Rest,Permissions,Http Error,我正在设计一个RESTful API,它使用HTTP状态代码和谓词作为通信中的关键组件 在宗教层面上,它是站在RESTafarian的狂热者一边 确定HTTP状态代码的经验法则已被使用,或类似资源 GET/api/documents/1-401用户尚未登录 GET/api/documents/1-200用户有权限 GET/api/documents/1-403用户没有权限 DELETE/api/documents/1-204用户有权限 DELETE/api/documents/1-403用户没
-GET/api/documents/1
用户尚未登录401
-GET/api/documents/1
用户有权限200
-GET/api/documents/1
用户没有权限403
-DELETE/api/documents/1
用户有权限204
-DELETE/api/documents/1
用户没有权限403
-GET/api/documents/2
用户权限不相关,资源不存在404
-DELETE/api/documents/2
用户权限无关,资源不存在404
-DELETE/api/documents/1
用户拥有权限,资源已被删除404
-DELETE/api/documents/1
用户没有权限,资源已被删除404
- 使用上的一致性
- 不通过错误公开私人信息
- 正确使用客户端或中间层缓存的状态代码
- 尽早失败,将查找保持在最低限度
(互联网上的许多REST讨论和回答都只是“抛出400个错误请求,反正没人关心”,我没有需要快速修复或实用黑客的问题。谢谢)一般指针:如果资源存在,但用户无权对其执行操作,您应该返回401,而不是403: 401未经授权 类似于403禁止,但专门用于 需要身份验证且已失败或尚未验证时 提供 及 403禁止 请求是有效的请求,但服务器拒绝响应。与401未经授权的响应不同,身份验证不会产生任何影响 另见
我用403对一个现有的资源,如果它不是你的不清楚 缓存,以及所有不存在的资源上的404,以便告诉 客户端删除该数据 如前所述,应该使用401而不是403。如果您只想说“对不起,找不到资源”,404可以返回。但是,如果您想说“资源曾经在这里,但现在已经不在了,将来也不会再在这里了”(在您的情况下,似乎是这样),您可以返回410: 410不见了 表示请求的资源不再可用 并且将不再可用。这应在以下情况下使用: 已故意删除资源,应删除该资源 清除。收到410状态代码后,客户端不应 以后再次请求资源。客户端,如搜索 引擎应该从索引中删除资源
总而言之,这就是我将如何在您的案例中实现它。我所做的更改以粗体显示
-GET/api/documents/1
用户尚未登录401
-GET/api/documents/1
用户有权限200
-401用户没有权限GET/api/documents/1
-DELETE/api/documents/1
用户有权限204
-403用户没有权限DELETE/api/documents/1
-GET/api/documents/2
用户权限不相关,资源不存在404
-DELETE/api/documents/2
用户权限无关,资源不存在404
-410用户拥有权限,资源已被删除DELETE/api/documents/1
-401用户没有权限,资源已被删除DELETE/api/documents/1
我希望这对您有所帮助。无效删除调用的响应代码取决于失败的原因。就你的情况而言,我同意:
-用户有权限删除/api/documents/1
204无内容
-用户权限无关,资源不存在删除/api/documents/2
404未找到
-用户有权限,资源已删除删除/api/documents/1
410消失了
-用户没有权限,资源已被删除删除/api/documents/1
403禁止