Обработка ошибок

Любая ошибка от Яндекс Заданий характеризуется 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 Сервис временно недоступен, попробуйте повторить запрос через какое-то время.

Статусы из таблицы выше могут возвращаться для любых запросов.