我正在使用RESTful API。我有一个复杂的授权条件:假设您有三个不同的条件(可以将它们分别称为A,B和C),则可以访问API。当不满足其中一个条件时,服务器将响应“ 403禁止”(如果用户应该登录,则为“ 401未授权”,或者基于安全性考虑,返回“ 404未找到”)。但是,我也想提供关于授权失败原因的反馈,根据失败的情况显示不同的友好错误。我知道404没有主体(我也不想发送一个主体),而401和401应该仅具有身份验证方案来帮助用户进行身份验证。
是否可以发送诸如403(“原因:A”)或403(“原因:C”)之类的响应?
答案 0 :(得分:1)
我知道404没有身体[...]
您似乎把事情搞砸了。尽管带有204
的响应必须没有响应正文,但是与404
一起发送响应正文没有错。
是否可以发送403(“原因:A”)或403(“原因:C”)之类的响应?
您当然可以返回有关请求被forbidden的原因的详细信息(请注意不要泄露太多可能被恶意用户利用的信息)。
看看RFC 7807,它定义了简单的JSON和XML文档格式,以通知客户端HTTP API中的问题。这是报告API错误的一个很好的起点,并且还定义了application/problem+json
和application/problem+xml
媒体类型。
作为参考,请查看此类RFC提供的示例:
HTTP/1.1 403 Forbidden Content-Type: application/problem+json Content-Language: en { "type": "https://example.com/probs/out-of-credit", "title": "You do not have enough credit.", "detail": "Your current balance is 30, but that costs 50.", "instance": "/account/12345/msgs/abc", "balance": 30, "accounts": ["/account/12345", "/account/67890"] }