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:
El servidor no pudo entender la solicitud debido a una sintaxis incorrecta. El cliente NO DEBE repetir la solicitud sin modificaciones.
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:
El código de estado 422 (entidad no procesable) significa que el servidor comprende el tipo de contenido de la entidad de solicitud (por lo tanto, un código de estado 415 (tipo de medio no admitido) es inapropiado) y la sintaxis de la entidad de solicitud es correcta (por lo tanto, un 400 (solicitud incorrecta) ) el código de estado es inapropiado) pero no pudo procesar las instrucciones contenidas Por ejemplo, esta condición de error puede ocurrir si un cuerpo de solicitud XML contiene instrucciones XML bien formadas (es decir, sintácticamente correctas), pero semánticamente erróneas.
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.