Обработка ошибок
Любая ошибка от Яндекс Заданий характеризуется HTTP-статусом ответа и телом ответа с уточняющей информацией. Ошибки самодокументирующиеся, то есть из них должно быть понятно, в чём причина.
Пример ошибки c HTTP-статусом 409
:
{
"request_id": "337d68d1-974d-42b1-a2d0-6234f6373eed",
"code": "INAPPROPRIATE_STATUS",
"message": "This or related resource is in inappropriate status, operation is not allowed",
"payload": {
"appropriate_statuses": [
"OPEN",
"CLOSED"
]
}
}
В тексте каждой ошибки есть поля:
-
request_id
— внутренний идентификатор HTTP-запроса, в котором произошла ошибка. Его необходимо указывать при обращении в поддержку. -
code
— строковый код ошибки. Ошибки, характерные для разных операций, имеют одинаковые коды. Для одного и того же HTTP-статуса могут использоваться разные коды ошибок. Специфичные ошибки для конкретных операций имеют свои уникальные коды. -
message
— более подробное описание ошибки. Содержание поля может быть разным для одного и того же кода ошибки. -
payload
— дополнительная информация об ошибке. Например, поле из запроса и причина ошибки в нём. Это поле необязательное и может отсутствовать.
Список распространенных статусов
Ниже приведены HTTP-статусы, описывающие классы ошибок, с примерами распространённых ошибок:
HTTP-статус | Сообщение | Описание |
---|---|---|
2xx | Успешные запросы | |
200 |
OK | Успешный запрос. Ответ содержит JSON-объект или ссылку на скачивание файла. |
201 |
Created | Успешный запрос, в результате создан новый ресурс. Обычно это ответ на POST -запрос, целью которого является создание нового объекта. |
202 |
Accepted | Запрос получен, но ответное действие пока не совершено. Обычно это ответ на POST -, PATCH - или PUT -запрос, целью которого является изменение свойств существующих объектов. |
204 |
No Content | Сервер успешно выполнил запрос и отправка дополнительных данных не предусмотрена. Обычно это ответ на DELETE -запрос. |
4xx | Ошибки на стороне клиента | |
400 |
Bad Request | Сервер не распознал запрос из-за неправильного синтаксиса. Повторный запрос без изменений вернет такую же ошибку. |
403 |
Forbidden | Сервер распознал запрос, но не выполнил его, поскольку запрос требует аутентификации. |
404 |
Not Found | Запрошенный ресурс не найден на сервере. |
405 |
Method Not Allowed | Метод запроса известен на сервере, но не поддерживается ресурсом, к которому он обращался. |
409 |
Conflict | Запрос не может быть обработан из-за конфликта с текущим статусом ресурса. Например, нельзя открыть архивированный пул. |
413 |
Payload Too Large | Количество элементов в запросе превышает максимально разрешенное значение. |
415 |
Unsupported Media Type | Медиа-формат запрошенных данных не поддерживается сервером, поэтому сервер отклонил запрос. Убедитесь, что вы добавили заголовок Content-Type: application/json к POST -, PUT - или PATCH -запросу, когда это необходимо. |
429 |
Too Many Requests | Превышено разрешенное количество запросов в единицу времени. См. страницу Ограничение количества запросов для дополнительной информации об ограничениях API Яндекс Заданий. |
5xx | Ошибки на стороне сервера | |
500 |
Internal Server Error | На сервере произошла неожиданная ошибка. Запрос не выполнен. |
503 |
Service Unavailable | Сервис временно недоступен, попробуйте повторить запрос через какое-то время. |
Статусы из таблицы выше могут возвращаться для любых запросов.