Estoy en una encrucijada con un diseño de API para un cliente (JS en un navegador) para hablar con un servidor. Utilizamos HTTP 409 Conflict para representar el fallo de una acción debido a un bloqueo de seguridad vigente. El bloqueo de seguridad evita que los desarrolladores realicen cambios accidentalmente en los sistemas de producción de nuestros clientes. Se me ha encomendado el manejo de los 409 un poco más elegantes en el cliente para indicar por qué falló una llamada de API en particular.
Mi solución fue envolver los controladores de fallas de cualquiera de nuestras llamadas AJAX que mostrarán una notificación en el cliente cuando algo falla debido a 409: todo esto está bien y funciona bien junto con otros errores 4XX y 5XX que usan el mismo mecanismo.
Ha surgido un problema cuando uno de nuestros manejadores de ruta responde con 409 cuando se encuentra con un error de lógica de negocios: mi envoltorio AJAX informa que el bloqueo de seguridad está activado, mientras que el manejador de fallas existente del cliente informa qué (cree) que el problema se basa en el cuerpo de la respuesta Una solución simple sería cambiar la respuesta del manejador o el código de estado que usamos para representar el bloqueo de seguridad.
Lo que me lleva a mi encrucijada: ¿deberían los códigos de estado HTTP incluso usarse para representar errores de lógica de negocios? Esta pregunta aborda el mismo problema que estoy enfrentando pero no ganó mucha tracción. Como se sugiere en la respuesta vinculada, me estoy inclinando hacia el uso de HTTP 200 OK con un cuerpo apropiado para representar el fracaso dentro de la lógica empresarial.
¿Alguien tiene alguna opinión fuerte aquí? ¿Alguien puede convencerme de que esta es la forma incorrecta de representar el fracaso?
400 Bad Request
como código HTTP general parece mejor cubrir los errores de lógica de negocios como clase.
400 Bad Request
cuando faltan datos o no se pueden leer / analizar. Es decir, los datos de la solicitud en sí son malos de alguna manera.
400 Bad Request
. La razón de esta separación es porque los futuros sistemas, desarrolladores o lectores de documentos pueden confundirse por su desviación del estándar mundial.