我相信人们对此有很多不同的看法 我想知道其他开发人员如何考虑处理这种情况。
Web应用程序/服务需要身份验证(即,用户需要登录) 它不公开。
示例网址 ~/PurchaseOrder/View/1234
您如何决定以下两个选项:
可以说,采购订单记录可以从JSON格式的Web服务中检索 显然,如果记录不存在,API将返回HTTP 404。
但是当用户没有查看特定采购订单记录的权限时,它应该如何响应?将响应代码设置为404并在JSON中返回错误消息
谢谢!
答案 0 :(得分:6)
对于REST Web服务API,如果找不到记录,则返回404。 如果用户没有权限,如果您想知道该记录存在但用户没有权限,则返回403“Forbidden”。如果您不希望在用户无权查看该记录时披露该记录的事实,请返回404.
来自HTTP spec:
10.4.4 403禁止
服务器理解请求,但拒绝履行请求。 授权无效,请求不应重复。如果 请求方法不是HEAD,服务器希望公开 为什么请求没有得到满足,它应该描述原因 因为该实体的拒绝。如果服务器不想做 此信息可供客户使用,状态代码404(不是 找到了)可以代替使用。
对于Web应用程序场景,在出现错误的情况下返回404(或403)以及响应正文中的友好错误页面可能在技术上更正确,但返回200可能会导致更好用户体验,具体取决于您的受众群体使用的浏览器。 (我听说有些旧版浏览器忽略了4xx错误的自定义错误页面,而是显示了自己的内部错误页面,而它们总是显示200响应的内容。现代浏览器不应该有这个问题。)