Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTAPI应该返回哪个HTTP代码?_Rest_Http - Fatal编程技术网

RESTAPI应该返回哪个HTTP代码?

RESTAPI应该返回哪个HTTP代码?,rest,http,Rest,Http,我目前正在一个后端有Spring,前端有Angularjs的网站上工作,我们已经讨论了后端响应以处理前端的消息对话框,我有一个问题要问: 假设我有一个API: GET : /getstatistics Request params : fromTime,toTime ( in timestamp format) 若客户机发出一个带有无效参数(如字符串)的请求,那个么应该从服务器返回哪个响应代码?HTTP 400错误的请求和响应正文包含消息“fromTime和toTime应采用时间戳格式”,还是

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

任何建议和意见都将不胜感激


谢谢

是的,您是对的,您的http代码应该是
400
。这里的讨论通常应该是您是否需要返回
400
422
。为此,您可以检查此问题的已接受回答,因此对于错误请求,您应该返回一个
400
错误。查看参考资料

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

请看一看

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

以及

4xx(客户端错误):请求包含错误语法,或者无法执行 履行

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

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


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

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

    参考:

    编辑: 在任何情况下,此处的状态代码200都不正确,因为存在错误。作为响应,您可以返回如下特定信息:

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

    谢谢,但我仍然需要更多的细节或一些标准来理解。@meobeo173我编辑了我的答案以包含更多细节。另外,你可以通过我在答案中添加的链接找到更详细的回复。谢谢,我想这就是谷歌出现在我的博客中的原因example@meobeo173它可能会发送200以成功重定向,对此不确定,但我很确定发送状态为200的错误不是一个好主意。您应该能够通过查看状态代码而不是有效负载IMHO来区分您的响应。另外,请查看此SO链接以获取进一步参考::“HTTP状态代码是技术响应,而不是业务逻辑响应”我找到了此引用,但在我的情况下,为了简化客户端实现,我认为响应有效技术但无效业务逻辑请求的错误代码无关紧要?@meobeo173在业务逻辑失败的情况下,可以使用
    200
    进行响应,但因为我们讨论的是REST,我们使用HTTP作为应用程序级协议,更好的设计是让您的状态代码自己说话(客户端错误->4xx,服务器端错误->5xx)。虽然没有明确的规则,但有时线条会变得模糊。@meobo173我已经更新了我的答案,现在应该更有意义了。虽然,最终它有时会归结为您的API设计,希望这是有帮助的。您所说的参数如何使用是什么意思?如果资源本身不可路由/无法通过URL找到(即客户端调用了/user而不是/users),我通常只返回404。如果资源的状态而不是URL本身有问题,409是有意义的。在OP的例子中,听起来请求参数的格式不正确,因此400可能比404或409更合适。这是一个我用来参考的好网站