当前位置: 首页 > 知识库问答 >
问题:

RESTAPI应该返回哪个HTTP代码?

郑卜鹰
2023-03-14

我目前正在一个后端有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代码,然后仍然需要检查消息的内容,这是否更好?

任何建议和意见都很感激。

谢谢!

共有3个答案

娄学文
2023-03-14

我认为这与如何使用参数有关。如果您使用该资源,那么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/"
   }
  ]
} 
景建业
2023-03-14

是的,您是对的,您的http代码应该是400。这里的讨论通常应该是您是否需要返回400422。对于这一点,您可以检查接受的关于SO问题400和422对数据发布的响应

秦凯旋
2023-03-14

对于错误请求,您应该返回400错误。查看此参考资料。

由于被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性的请求路由),服务器无法或将不会处理该请求。

请看RFC7231#第6节

客户必须了解任何状态代码的类别,如第一位数字所示

和,

4xx(客户端错误):请求包含错误的语法或无法满足

错误的语法可能与您在问题中提到的类似(使用无效参数发出请求,如字符串)。

无论何时设计RESTful API,我都会将这两个参考资料放在手边,这可能对您也有帮助:

  1. https://httpstatuses.com/
 类似资料:
  • 我使用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)。然而,登录功能似乎没有返回任何响应状态。反应似乎是不确定的。在这种情况下,即使输入了正确的密码和用户名,该函数也会给我错误密码或用户名的窗口警报。我应该检