我正在开发一个由javascript / ajax前端使用的REST后端。
我正在尝试找到一种方法来处理前端发送到后端的无效请求。
我遇到的一个问题是HTTP状态代码(例如{400
,409
)的细微程度不足以涵盖业务逻辑错误,例如密码不匹配(在用户更改密码)或系统未知的电子邮件(如果用户尝试使用该应用程序登录)。
我正在考虑使用 HTTP响应标头,以便将服务器端错误从后端传递到前端。
我可以使用Error
枚举(或带有常量的类),如下所示:
public enum Error {
UNKNOWN_EMAIL,
PASSWORDS_DONT_MATCH,
//etc.
}
然后我会使用该枚举来为响应设置标题,如下所示:
response.setHeader(Error.UNKNOWN_EMAIL.name(), "true");
...并在前端适当处理错误。
可以改进上述架构吗?如果是这样的话?
我对HTTP响应标头的使用是否正确?
我应该使用常量还是枚举?
答案 0 :(得分:1)
我对HTTP响应标头的使用是否正确?
我认为这不正确,但我更喜欢直接在响应正文中发送错误消息/代码。这通常对客户端访问更方便,更明确。作为使用每个响应的一部分,客户端可以检查错误的内容(您可能有多个)并相应地采取行动。以下是一个有点人为的例子:
// ...
{
"errors": {
"username": "not found"
"password": "no match"
}
"warnings": {
"account": "expired"
}
}
// ...
以上是一个非常简单的方法 - 您的JSON消息可以像您希望的那样复杂,但请记住,您应该只公开客户端为实现其目标所需的信息。这还取决于您是为第三方/公共消费发布API还是仅为您自己的客户发布API,即。你自己的网站。如果你有其他各方消费它,那么就考虑一下,因为一旦你发布它然后你需要保持这种方式 - 否则你打破任何消费者。
查看JSON API以获取有关处理错误的标准化指导。
我应该使用常量还是枚举?
由于这些是一组相关的属性,因此枚举优于常量(我假设您使用的是Java)。