Estou numa encruzilhada com algum design de API para um cliente (JS em um navegador) conversar com um servidor. Usamos o Conflito HTTP 409 para representar a falha de uma ação devido a um bloqueio de segurança em vigor. O bloqueio satisfatório impede que os desenvolvedores façam alterações acidentalmente nos sistemas de produção de nossos clientes. Fui encarregado de lidar com os 409 um pouco mais graciosamente no cliente para indicar por que uma chamada de API específica falhou.
Minha solução foi agrupar os manipuladores de falhas de qualquer uma de nossas chamadas AJAX, que exibirão uma notificação no cliente quando algo falhar devido ao 409 - tudo está bem e funciona bem ao lado de outros erros 4XX e 5XX que usam o mesmo mecanismo.
Surgiu um problema em que um de nossos manipuladores de rota responde com 409s ao encontrar um erro de lógica de negócios - meu wrapper AJAX relata que a trava de segurança está ativada, enquanto o manipulador de falhas existente do cliente relata o que (pensa) o problema é baseado no corpo da resposta. Uma solução simples seria alterar a resposta do manipulador ou o código de status que usamos para representar a trava de segurança.
O que me leva à minha encruzilhada: os códigos de status HTTP devem ser usados para representar erros de lógica de negócios? Esta pergunta aborda o mesmo problema que estou enfrentando, mas não ganhou muita força. Conforme sugerido na resposta vinculada, estou inclinado a usar o HTTP 200 OK com um corpo apropriado para representar falha na lógica de negócios.
Alguém tem alguma opinião forte aqui? Alguém é capaz de me convencer de que esta é a maneira errada de representar o fracasso?
400 Bad Request
como um código HTTP geral parece melhor cobrir erros de lógica de negócios como uma classe.
400 Bad Request
quando faltam dados ou não podem ser lidos / analisados. Ou seja, os dados da solicitação em si são ruins de alguma forma.
400 Bad Request
. O motivo dessa separação é que os sistemas, desenvolvedores ou leitores de documentos futuros podem ficar confusos com o desvio do padrão mundial.