2012-02-19 41 views
10

Cuando un usuario envía datos inválidos a mi API (generalmente a través de Javascript + JSON), me pregunto con qué HTTP response code debería responder.Si falla un método REST API, ¿debo devolver un mensaje de estado HTTP 200, 400 o 500?

¿Debo devolver una respuesta HTTP 200 con los errores, o debería mi servidor responder con un error de 400 o 500 ya que la solicitud no pasó mi validación debido a algunos datos incorrectos?

Parece un error 400 es el camino a seguir, ya que "La clase 4xx del código de estado está destinado a los casos en que el cliente parece haber errado" - wikipedia

Sin embargo, una cosa a tener en cuenta es que la mayoría de la gente utiliza un marco como jQuery, que requiere que se especifique una devolución de llamada alternativo cuando peticiones AJAX responden con cualquier código de estado que no sea un 200.

+2

400 es la manera "correcta", 200 es el camino "educado". Tu eliges. –

+0

posible duplicado de [REST códigos de estado HTTP] (http://stackoverflow.com/questions/3290182/rest-http-status-codes) –

+0

Pregunta muy interesante actualmente devuelvo un objeto JSON vacío pero eso probablemente no sea correcto, mirando los códigos de respuesta HTTP que más se aproximan a 400 (solicitud incorrecta), Interesados ​​en leer las opiniones de otros en este. – Dampsquid

Respuesta

7

400 Bad Request la solicitud no pudo ser entendido por el servidor debido a sintaxis mal formada. El cliente NO DEBE repetir la solicitud sin modificaciones.

uso statusCode en jquery ajax vocación:

<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

Parece complicado esperar que el cliente maneje todos y cada uno de los códigos de estado. –

+1

Muy buena respuesta del cliente horaceman. Sin embargo, desde @Laurent, parece tener un punto válido. Quizás un medio feliz entre correcto y realista es implementar solo códigos de estado de pareja que cubran todas las bases. 500, 400, 404 y 200 deberían hacer el trabajo. El cliente solo necesita implementar 400 y 200. Se debe notar 404 antes de que el código llegue a la producción y si no, o si hay un error real del servidor (500) atrapado por el manejador de errores predeterminado. – Xeoncross

+2

@ this.lau_ No necesita manejar todos los códigos de error. Un simple 'código! = 200' sería suficiente. Pero la mayoría de las veces espero que el cliente quiera dar una retroalimentación significativa al usuario. –

Cuestiones relacionadas