¿Cuál es el código de respuesta HTTP óptimo cuando no se informa 200 (todo está bien) pero error en la entrada?
Por ejemplo, envía algunos datos al servidor y responderá que sus datos son incorrectos
el uso se 500
parece más al problema del servidor que se
usa 200
con el texto de advertencia / respuesta de error es malo (que permite el almacenamiento en caché y no todo está bien) el
uso 204
y la devolución de nada, tal vez sea bueno (pero ¿está bien soportado?) el
uso 404
es incorrecto si la ruta solicitada (script) está disponible y en el lugar apropiado
api
http
validation
Marek Sebera
fuente
fuente
Respuestas:
Tuvimos el mismo problema al hacer nuestra API también. Estábamos buscando un código de estado HTTP equivalente a un
InvalidArgumentException
. Después de leer el artículo fuente a continuación, terminamos usando422 Unprocessable Entity
qué estados:fuente: https://www.bennadel.com/blog/2434-http-status-codes-for-invalid-data-400-vs-422.htm
fuente
Los códigos que comienzan con 4 (4xx) están destinados a errores del cliente. ¿Quizás 400 (Bad Request) podría ser adecuado para este caso? La definición en http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html dice:
"El servidor no pudo entender la solicitud debido a una sintaxis incorrecta. El cliente NO DEBE repetir la solicitud sin modificaciones".
fuente
400 Bad Request
no está mal, pero generalmente debe reservarse para la sintaxis con formato incorrecto. OP parece estar más preocupado por un caso con una sintaxis bien formada pero con valores no válidos. Plus 400 es un código de respuesta bastante común "oh, mierda, algo no estaba bien", que quizás desee diferenciar de un caso particular de entrada errónea.Además de las especificaciones RFC , también puede ver esto en acción. Mira las respuestas de Twitter.
https://developer.twitter.com/en/docs/ads/general/guides/response-codes
fuente
409 Conflict
Podría ser una solución aceptable.De acuerdo con: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
El documento continúa con un ejemplo:
En mi caso, me gustaría PONER una cadena, que debe ser única, a una base de datos a través de una API. Antes de agregarlo a la base de datos, estoy verificando que no esté en la base de datos.
Si es así, volveré
"Error: The string is already in the database", 409
.Creo que esto es lo que quería el OP: un código de error adecuado para cuando los datos no pasan los criterios del servidor.
fuente
De acuerdo con el siguiente escenario,
Digamos que alguien realiza una solicitud a su servidor con datos que están en el formato correcto, pero que simplemente no son datos "buenos". Entonces, por ejemplo, imagine que alguien publicó un valor de cadena en un punto final de API que esperaba un valor de cadena; pero, el valor de la cadena contenía datos que estaban en la lista negra (por ejemplo, evitar que las personas usen "contraseña" como contraseña). entonces el código de estado podría ser 400 o 422?
Hasta ahora, habría devuelto una "400 Solicitud incorrecta", que, según w3.org, significa:
Esta descripción no se ajusta a las circunstancias; pero, si sigue la lista de códigos de estado HTTP centrales definidos en el protocolo HTTP / 1.1, probablemente sea su mejor opción.
Recientemente, sin embargo, alguien de mi equipo de desarrollo me señaló [a mí] que las API populares están comenzando a usar extensiones HTTP para volverse más granulares con sus informes de errores. Específicamente, muchas API, como Twitter y Recurly, están utilizando el código de estado "422 Entidad no procesable" como se define en la extensión HTTP para WebDAV. El código de estado HTTP 422 dice:
Volviendo a nuestro ejemplo de contraseña de arriba, este código de estado 422 se siente mucho más apropiado. El servidor comprende lo que estás intentando hacer; y comprende los datos que está enviando; simplemente no permitirá que se procesen esos datos.
fuente
404 - No encontrado - se puede usar para El URI solicitado no es válido o el recurso solicitado, como un usuario, no existe.
fuente