Skip to content

Instantly share code, notes, and snippets.

@mikeananev
Last active July 22, 2022 10:09
Show Gist options
  • Select an option

  • Save mikeananev/3303f8a3ec135e52e2afab3bb94b309e to your computer and use it in GitHub Desktop.

Select an option

Save mikeananev/3303f8a3ec135e52e2afab3bb94b309e to your computer and use it in GitHub Desktop.
Семантические коды ошибок

Семантические коды ошибок

При взаимодействии в распределенной среде разработчики часто используют типы ошибок, привязанные к языку программирования или придумывают цифровые коды ошибок, как например в HTTP 1xx, 2xx, и т.д.

На моей практике удобно использовать семантические коды ошибок + описание деталей ошибки. Большинство ошибок в распределённой среде сводятся к следующим семантическим категориям ответов:

Категория ответа Семантика Повторный вызов Метод исправления

"success"

Запрос успешно выполнен.

Нет

Нет

"incorrect"

Запрос содержит неверные параметры или данные запроса.

Нет

Необходимо устранить ошибки в параметрах запроса или данных на стороне отправителя.

"unsupported"

Запрос содержит неподдерживаемый метод, протокол или версию API на стороне получателя.

Нет

Отправителю необходимо устранить ошибки в запросе. Например, уточнить версию API или имя метода или использовать правильный протокол.

"unauthorized"

Запрос отклонён, т.к. отправитель не предоставил получателю сведения о правах доступа. Например: не предоставлен токен доступа, анонимная или устаревшая сессия при вызове.

Нет

Отправителю необходимо создать сессию или представить данные для авторизации (например токен), или совершить предварительные действия для предоставления получателю сведений о правах доступа отправителя.

"forbidden"

Запрос отклонён, т.к. отправителю явно запрещено выполнение данного запроса (нет прав).

Нет

Отправителю необходимо получить права доступа на выполнение данного запроса или предоставить другие данные для авторизации.

"unavailable"

Получатель сейчас недоступен и не может обработать запрос.

Да

Отправителю необходимо убедиться, что получатель работает нормально (если это возможно) и повторить запрос позднее.

"not found"

Запрашиваемые данные отправителем не найдены у получателя.

Нет

Отправителю необходимо уточнить параметры запроса. Например, уточнить идентификатор запрашиваемой сущности или изменить условия запроса.

"conflict"

Запрос содержит конфликтующие данные, которые не могут быть приняты получателем.

Нет

Отправителю необходимо синхронизировать конфликтные данные с получателем. Например, уточнить версию сущности данных в БД, исправить метку времени, проверить существование записи данных и т.д.

"busy"

Запрос не может быть обработан в данный момент, т.к. не хватает ресурсов у получателя или он загружен другой работой.

Да

Отправителю необходимо повторить запрос позднее.

"error"

Общая ошибка при выполнении запроса. Запрос содержит испорченные данные, которые не могут быть прочитаны получателем или ошибка в канале связи.

Нет

Отправителю необходимо устранить ошибки в запросе или проверить канал связи до получателя.

"interrupted"

Запрос прерван на стороне отправителя.

Да

Отправитель может послать запрос заново.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment