Vários servidores com os quais eu lidei retornam o HTTP 200 para solicitações que o cliente deve considerar uma falha, com algo como 'success: false' no corpo.
Isso não parece uma implementação adequada de códigos HTTP para mim, principalmente em casos de falha na autenticação. Li os códigos de erro HTTP resumidos de maneira bem sucinta, como '4xx' indica que a solicitação não deve ser feita novamente até ser alterada, enquanto '5xx' indica que a solicitação pode ou não ser válida e pode ser tentada novamente, mas não teve êxito. Nesse caso, 200: login falhou ou 200: não foi possível encontrar esse arquivo ou 200: faltando o parâmetro x, definitivamente parece errado.
Por outro lado, pude ver o argumento de que '4xx' deve indicar apenas um problema estrutural com a solicitação. Portanto, é adequado retornar 200: usuário / senha incorretos, em vez de 401, não autorizados, porque o cliente pode fazer a solicitação, mas isso está incorreto. Esse argumento pode ser resumido como, se o servidor pudesse processar a solicitação e fazer uma determinação, o código de resposta deveria ser 200 e cabe ao cliente verificar o corpo para obter mais informações.
Basicamente, isso parece ser uma questão de preferência. Mas isso é insatisfatório; portanto, se alguém tiver uma razão para que um desses paradigmas seja mais correto, eu gostaria de saber.
success: false
implica que a solicitação falhou e você a conhece. Isso deve ser um 500. Algo como seu nome de usuário / senha incorreto seria um 401. Isso não é tão ambíguo.