Tengo un servicio REST que está expuesto a clientes de iPhone y Android. Actualmente sigo los códigos HTTP 200, 400, 401, 403, 404, 409, 500 etc.
Mi pregunta es ¿dónde está el lugar recomendado para poner el motivo / descripción / causa del error? ¿Tiene más sentido que la API REST siempre tenga un motivo personalizado en el encabezado como ese?
< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
¿O es mejor tenerlo en el cuerpo de respuesta a través de JSON?
< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }
http
rest
http-error
James Cowhen
fuente
fuente
Respuestas:
Citando la especificación HTTP para códigos de error 400.x:
Es una buena práctica incluir el mensaje de error como una entidad en el cuerpo de la respuesta HTTP, ya sea JSON, texto sin formato, HTML formateado o cualquier otro formato que desee utilizar.
fuente
Es mejor tener detalles de error en el cuerpo. Además, muchos (la mayoría / casi todos, por ejemplo, WSGI) servidores y clientes no admiten cambiar el nombre del código de error; trátelos como pares fijos (por ejemplo, 400 es siempre "Solicitud incorrecta" y no "Solicitud incorrecta - Usted Olvidé especificar el ID de usuario "). Incluso si no se rompen, no les importará su nombre especial para el código de error específico.
fuente
El error no pertenece al cuerpo. Pertenece al encabezado Advertencia.
Referencia
fuente
Warning
como sugiere el nombre, no es para errores. El RFC (7234) dice:> El uso de una advertencia, en lugar de un código de estado de error, distingue estas respuestas de las fallas verdaderas.