我目前在一个网站上工作,后端有Spring,前端有Angularjs,我们讨论过后端响应以处理前端的消息对话框,我有一个问题要问:
假设我有一个API:
GET : /getstatistics
Request params : fromTime,toTime ( in timestamp format)
如果客户端使用无效的params(如字符串)发出请求,应该从服务器返回哪个响应代码? HTTP 400错误请求和响应正文,带有消息" fromTime和toTime应采用时间戳格式"或具有相同消息的HTTP 200?
我看到了一些Google的API,例如Oauth,他们为无效access_token的请求返回代码200但是,在我们的项目中,我认为它应该是HTTP 400 ,因为Javascript已成功并且错误回调,它是否更好,只是弹出一个内部消息而不是HTTP 200代码的红色对话框然后仍然需要检查消息的内容?
任何建议和意见都表示赞赏。
谢谢!
答案 0 :(得分:9)
对于错误请求,您应该返回400
错误。查看this参考。
由于某些原因,服务器无法或不会处理请求 被认为是客户端错误(例如,格式错误的请求) 语法,无效请求消息框架或欺骗性请求 路由)。
客户必须了解任何状态代码的类,如下所示 第一个数字
和
4xx(客户端错误):请求包含错误语法或不能包含错误语法 实现
错误的语法可能就像你在问题中提到的那样(使用无效参数发出请求,比如字符串)。
每当我设计RESTful API时,我都会将这两个引用放在手边,对你也有帮助:
答案 1 :(得分:2)
是的,你是对的,http代码应该是400
。您在此处的讨论通常应该是您是否需要返回400
或422
。为此,您可以查看此SO问题400 vs 422 response to POST of data
答案 2 :(得分:0)
我认为这与参数的使用方式有关。如果您使用该资源,则应返回404。如果数据无效,那么我们决定为请求设置409状态。由于缺少/无效参数,它无法100%完全填充。
HTTP状态代码" 409冲突"对我们来说是一个很好的尝试,因为它是 定义要求为用户提供足够的信息 认识到冲突的根源。
编辑: 在任何情况下,状态代码200在这里都是不正确的,因为存在错误。作为回应,您可以返回以下具体信息:
{
"errors": [
{
"userMessage": "Sorry, the parameter xxx is not valid",
"internalMessage": "Invalid Time",
"code": 34,
"more info": "http://localhost/"
}
]
}