Несколько серверов, с которыми я имел дело, будут возвращать HTTP 200 для запросов, которые клиент должен рассматривать как сбой, с чем-то вроде «success: false» в теле.
Это не похоже на правильную реализацию HTTP-кодов, особенно в случаях неудачной аутентификации. Я прочитал коды ошибок HTTP довольно кратко, суммируя их как «4xx» указывает, что запрос не должен повторяться до тех пор, пока не будет изменен, в то время как «5xx» указывает, что запрос может или не может быть действительным и может быть повторен, но был неудачным. В этом случае 200: не удалось войти в систему, или 200: не удалось найти этот файл, или 200: отсутствует параметр x, определенно кажутся неправильными.
С другой стороны, я мог видеть аргумент, что «4xx» должен указывать только на структурную проблему с запросом. Так что это правильно, чтобы вернуть 200: неверный пользователь / пароль, а не 401 неавторизованный, потому что клиенту разрешено сделать запрос, но это, оказывается, неверно. Этот аргумент может быть обобщен следующим образом: если сервер был в состоянии обработать запрос и сделать определение вообще, код ответа должен быть 200, и клиент должен проверить тело для получения дополнительной информации.
По сути, это вопрос предпочтений. Но это неудовлетворительно, поэтому, если у кого-то есть причина, почему любая из этих парадигм является более правильной, я хотел бы знать.
success: false
подразумевает, что запрос не выполнен, и вы это знаете. Это должно быть 500. Что-то вроде вашего неверного имени пользователя / пароля будет 401. Это не так уж многозначно.