Wiki
Clone wikimkp-portal / RestErrorHandling
Обработка ошибок
Если при обработке запроса к RESTful API в запросе пользователя обнаруживается ошибка или происходит что-то непредвиденное на сервере, выбрасывается исключение, чтобы уведомить пользователя о нештатной ситуации.
Сводный список кодов состояния HTTP, используемых REST-фреймворком:
200
: OK. Все сработало именно так, как и ожидалось.201
: Ресурс был успешно создан в ответ наPOST
-запрос. ЗаголовокLocation
содержит URL, указывающий на только что созданный ресурс.204
: Запрос обработан успешно, и в ответе нет содержимого (для запросаDELETE
, например).304
: Ресурс не изменялся. Можно использовать закэшированную версию.400
: Неверный запрос. Может быть связано с разнообразными проблемами на стороне пользователя, такими как неверные JSON-данные в теле запроса, неправильные параметры действия, и т.д.401
: Аутентификация завершилась неудачно.403
: Аутентифицированному пользователю не разрешен доступ к указанной точке входа API.404
: Запрошенный ресурс не существует.405
: Метод не поддерживается. Сверьтесь со списком поддерживаемых HTTP-методов в заголовкеAllow
.415
: Не поддерживаемый тип данных. Запрашивается неправильный тип данных или номер версии.422
: Проверка данных завершилась неудачно (в ответе наPOST
-запрос, например). Подробные сообщения об ошибках смотрите в теле ответа.429
: Слишком много запросов. Запрос отклонен из-за превышения ограничения частоты запросов.500
: Внутренняя ошибка сервера. Возможная причина — ошибки в самой программе.
Ответ при исключении типизирован. Например:
HTTP/1.1 404 Not Found Date: Sun, 02 Mar 2014 05:31:43 GMT Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y Transfer-Encoding: chunked Content-Type: application/json; charset=UTF-8 { "name": "Not Found Exception", "message": "The requested resource was not found.", "code": 0, "status": 404 }
Исключением является только ответ с состоянием 422
, при котором возвращаеться ошибки по валидируемым полям. Например:
HTTP/1.1 422 Data Validation Failed Date: Sun, 02 Mar 2014 05:31:43 GMT Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y Transfer-Encoding: chunked Content-Type: application/json; charset=UTF-8 [ { "field": "password", "message": "Необходимо заполнить \"Password\"." }, { "field": "app_key", "message": "Необходимо заполнить \"App Key\"." } ]
Updated