2012-02-19 99 views
10

当用户向我的API(通常通过Javascript + JSON)提交无效数据时,我想知道我应该回复哪个HTTP response code如果REST API方法失败,我应该返回200,400还是500个HTTP状态消息?

我是否应该返回带有错误的HTTP 200响应 - 或者我的服务器是否应答400或500错误,因为请求实际上由于某些错误数据而失败了我的验证?

这似乎是一个400错误是因为要走的路“中的4xx类的状态码是用于在客户看来情况下出现了偏差” - wikipedia

不过,有一点要牢记是大多数人使用像jQuery这样的框架,当AJAX请求使用除200以外的任何状态代码进行响应时,需要您指定备用回叫。

+2

400是 “正确的”,200是 “礼貌” 的方式。你选。 – 2012-02-19 00:54:30

+0

可能重复[REST HTTP状态码](http://stackoverflow.com/questions/3290182/rest-http-status-codes) – 2012-02-19 00:55:25

+0

非常有趣的问题目前我返回一个空的JSON对象,但那可能不正确,看着最接近的HTTP响应代码将会成为400(不好的请求),有兴趣阅读其他人的观点。 – Dampsquid 2012-02-19 00:56:27

回答

7

400错误的请求服务器无法理解请求,原因是格式错误的语法。客户端不应该在没有修改的情况下重复请求。

使用的StatusCode在jQuery的AJAX调用:

<html> 
<head> 
<title>jquery testing</title> 
<script type="text/javascript" src="jquery-1.6.2.min.js"/>"></script> 
<script language="javascript"> 
$(document).ready(
    function(){ 
     $('#linkClick').click(
      function(){ 
        $.ajax({ 
         url: 'a.html', 
         data: {}, 
         type: 'get', 
         dataType: 'json', 
         statusCode: { 
          404:function() { alert("404"); }, 
          200:function() { alert("200"); }, 
          201:function() { alert("201"); }, 
          202:function() { alert("202"); } 
         }, 
         success: function(data) { 
          alert("Status: " + data); 
         } 
        }); 
       }); 
     } 
     ); 
</script> 
</head> 
<body> 
<a href="#" id="linkClick">click</a> 
</body> 
</html> 
+1

似乎很期待客户处理每一个状态码。 – 2012-02-19 04:49:49

+1

非常好的客户答案horaceman。但是,由于@劳雷恩,似乎有一个有效的观点。也许在正确和现实之间的一个愉快的媒介只是实现一个涵盖所有基础的状态码。 500,400,404和200应该完成这项工作。客户端只需要实现400和200.在代码生成之前,404应该被注意到,如果没有,或者有一个实际的服务器错误(500)被默认错误处理程序捕获。 – Xeoncross 2012-02-20 00:41:36

+2

@ this.lau_您无需处理每个错误代码。一个简单的'code!= 200'就足够了。但大部分时间我都希望客户想给用户提供有意义的反馈。 – 2014-04-09 01:55:13

相关问题