应从REST API返回哪些HTTP代码?

时间:2016-10-29 14:22:05

标签: rest http

我目前在一个网站上工作,后端有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代码的红色对话框然后仍然需要检查消息的内容?

任何建议和意见都表示赞赏。

谢谢!

3 个答案:

答案 0 :(得分:9)

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

  

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

请查看RFC7231#section-6

  

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

  

4xx(客户端错误):请求包含错误语法或不能包含错误语法   实现

错误的语法可能就像你在问题中提到的那样(使用无效参数发出请求,比如字符串)。

每当我设计RESTful API时,我都会将这两个引用放在手边,对你也有帮助:

  1. https://httpstatuses.com/
  2. http://www.restapitutorial.com/httpstatuscodes.html

答案 1 :(得分:2)

是的,你是对的,http代码应该是400。您在此处的讨论通常应该是您是否需要返回400422。为此,您可以查看此SO问题400 vs 422 response to POST of data

的已接受回复

答案 2 :(得分:0)

我认为这与参数的使用方式有关。如果您使用该资源,则应返回404。如果数据无效,那么我们决定为请求设置409状态。由于缺少/无效参数,它无法100%完全填充。

  

HTTP状态代码" 409冲突"对我们来说是一个很好的尝试,因为它是   定义要求为用户提供足够的信息   认识到冲突的根源。

参考:w3.org/Protocols/

编辑: 在任何情况下,状态代码200在这里都是不正确的,因为存在错误。作为回应,您可以返回以下具体信息:

{
  "errors": [
   {
    "userMessage": "Sorry, the parameter xxx is not valid",
    "internalMessage": "Invalid Time",
    "code": 34,
    "more info": "http://localhost/"
   }
  ]
}