ArtMavir
@ArtMavir

Какие http коды ошибок возвращать?

День добрый. Написал апи для мобильного приложения. Написано оно на php(один из популярных фреймворков). Работает всё отлично, обрабатываю ошибку. Но возник вопрос. Какие коды http ошибок возвращать? Приведу пример, чтобы была ясна суть вопроса.

Например. Мобильное приложение посылает запрос на апи для авторизации юзера. Сам запрос дошел до апи, но пароль не подходит. По сути, мы должны вернуть 200 OK, так как запрос дошел, но ведь данные с пользовательской информацией не вернулись мобильному приложению. И что возвращать? 500, 404 и т.д. И множество подобных примеров можно привести. Разъясните пожалуйста.

P.S. Знаю, что фейсбук всегда шлет 200 OK, но мне кажется это неправильно.

К чему вопрос. Не понимаю как обрабатывать коды ошибок на самом мобильном приложении. Например:
$http.post('http://api/v1/users/index/', {'login': user.login, 'password': user.password}).
			success(function(data) {
				$localStorage.userAuthData = data.response;
				console.log(data.response);
				if (data.response !== 'Password is not valid.') {
					if (data.response.approved == 0) 
					{
						$location.path('/success-reg');
					};
					if (data.response.approved == undefined)
					{
						$location.path('/success-auth');
					};
				} else {
					$ionicLoading.show({
						template: 'Bad password'
					});
					$timeout(function() {
						$ionicLoading.hide();
					}, 800);
				};
			}).
			error(function(err) {
				$ionicLoading.show({
					template: 'Bad request'
				});
				$timeout(function() {
					$ionicLoading.hide();
				}, 800);
			});


Здесь сработает Bad request. Потому что не вернутся 200 OK. Но тогда я не смогу обрабатывать ошибки типа пароль неправильный или юзера не существует.
  • Вопрос задан
  • 16201 просмотр
Решения вопроса 1
А почему нельзя все время посылать 200 OK? Ведь запрос успешный, просто в ответ на запрос отправляйте собственные коды ошибок, просто число, а не код ответа http.
Например 101 авторизация удалась, 102 неправильный пароль. 103 такой логин не зарегистрирован в системе...
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Есть 2 точки зрения.
Классический REST говорит что надо отдавать ошибки в http кодах сервера.
На практике занимались разработкой api под мобильные приложения несколько лет и столкнулись с тем, что многие библиотеки используемые для работы с апи на мобильных приложениях:
а) хреново работают с любым заголовком отличным от 200
b) хреново работают с любыми методами отличными от GET/POST

В итоге пришли к следующему решению (кусок из внутренней документации):
84e91208aadc415ea342aa6f822275ea.png
где code 400 говорит о том что серверу не нравятся какие то данные в запросе, error_code говорит о том что именно не нравится (почта, пароль итд - список свой в каждом методе api)
Ответ написан
Комментировать
thewind
@thewind
php программист, front / backend developer
Если ваш скрипт успешно обработал запрос, успешно полученный веб-сервером, то код ответа должен быть 200. Для примера, код 400 - не найдено. Скрипт же найден? Значит о каком 404 речь? Также с остальными.
Ответ написан
Qurban
@Qurban
Web developer
Есть вот ресурс со всеми кодами ответа www.restapitutorial.ru/httpstatuscodes.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы