我目前正在一个后端有Spring,前端有Angularjs的网站上工作,我们已经讨论了后端响应以处理前端的消息对话框,我有一个问题要问:
假设我有一个API:
GET : /getstatistics
Request params : fromTime,toTime ( in timestamp format)
若客户机发出一个带有无效参数(如字符串)的请求,那个么应该从服务器返回哪个响应代码?HTTP 400错误的请求和响应正文包含消息“fromTime和toTime应采用时间戳格式”,还是HTTP 200包含相同的消息?
我看到了一些Google的API,例如Oauth,他们返回代码200,用于带有无效访问令牌的请求,但在我们的项目中,我认为应该是HTTP 400,因为Javascript有成功和错误回调,如果只是弹出一个带有消息的红色对话框,而不是HTTP 200代码,然后仍然需要检查消息的内容,这是否更好?
任何建议和意见都很感激。
谢谢!
我认为这与如何使用参数有关。如果您使用该资源,那么404应该返回。如果数据根本无效,那么我们决定为请求设置409状态。由于缺少/无效参数,无法100%填充。
HTTP状态代码“409冲突”对我们来说是一个很好的尝试,因为它的定义要求包含足够的信息,以便用户识别冲突的来源。
参考文献:w3。组织/协议/
编辑:无论如何,状态代码200在这里是不正确的,因为有一个错误。作为响应,您可以返回如下特定信息:
{
"errors": [
{
"userMessage": "Sorry, the parameter xxx is not valid",
"internalMessage": "Invalid Time",
"code": 34,
"more info": "http://localhost/"
}
]
}
是的,您是对的,您的http代码应该是400
。这里的讨论通常应该是您是否需要返回400
或422
。对于这一点,您可以检查接受的关于SO问题400和422对数据发布的响应
对于错误请求,您应该返回400
错误。查看此参考资料。
由于被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或将不会处理该请求。
请看RFC7231#第6节
客户必须了解任何状态代码的类别,如第一位数字所示
和,
4xx(客户端错误):请求包含错误的语法或无法满足
错误的语法可能与您在问题中提到的类似(使用无效参数发出请求,如字符串)。
无论何时设计RESTful API,我都会将这两个参考资料放在手边,这可能对您也有帮助:
我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头
本文向大家介绍HTTP 返回状态码有哪些?相关面试题,主要包含被问及HTTP 返回状态码有哪些?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 100 Continue 继续。客户端应继续其请求 101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 200 OK 请求成功。一般用于GET与POST
问题内容: 我正在尝试从URL获取InputStream。可以从Firefox打开URL。它返回一个json,并且我已经安装了一个插件以在Firefox中查看json,因此我可以在其中查看它。 所以我尝试通过以下方式从Java获取它: 但是它在urlConnection.getInputStream()中抛出IOException。 我也尝试过: 但是没有运气。 任何信息都是可观的。提前致谢。 问
问题内容: 我的代码中包含基于HTML的查询,并且从服务器收到505响应后,似乎会引起一种特定的查询。我与其他似乎也有类似问题的人一起查看了505响应。显然505代表HTTP版本不匹配,但是当我将相同的查询URL复制到任何浏览器(尝试过firefox,seamonkey和Opera)时,似乎没有问题。我读过的一篇文章建议浏览器可能会自动处理版本不匹配的问题。 我试图通过使用Opera附带的漂亮的开
我想做一个网站的登录页面。我有一个函数,它使用AJAX向PHP脚本发送请求,以检查是否输入了正确的用户名和密码。如果查询返回成功的结果,则发送http_response_code(200),否则发送http_response_code(403)。然而,登录功能似乎没有返回任何响应状态。反应似乎是不确定的。在这种情况下,即使输入了正确的密码和用户名,该函数也会给我错误密码或用户名的窗口警报。我应该检