Ошибки API: понятные действия без раскрытия секретов

Кратко

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

Пустой защищённый коридор серверов и сетевого оборудования
В этой статье

Разделить статус, тип и случай

RFC 9457 определяет application/problem+json. Используйте стабильный тип проблемы и понятное описание случая; клиент не должен разбирать переведённую фразу для решения. Поле status, если есть, согласуйте с фактическим HTTP-статусом.

СтатусСмысл HTTPВозможное действие
400Некорректный запросИсправить до повтора.
401Нет действительных учётных данныхПроверить данные и предусмотренный механизм.
403Запрос понят, но отклонёнПроверить права; повтор их не выдаёт.
503Сервис временно недоступенОграниченно ждать и повторять, если безопасно.

Предусмотреть пути отказа

  • Опишите коды, форматы и ожидаемые действия. Проверьте пустые ответы, не-JSON шлюза, обрывы соединений и тайм-ауты.
  • Проверяйте ввод и права на сервере. Обрабатывайте ожидаемые ошибки, не скрывая неизвестные сбои; не выдавайте бизнес-отказ за успех.
  • Верните идентификатор корреляции для поддержки. Исключите стеки, внутренние запросы, пароли и токены из публичных ответов.

Повторять только обоснованно

5xx не разрешает бесконечные повторы. Учитывайте контракт, состояние, идемпотентность и срок. Сообщайте дефект минимальным очищенным примером; после исправления проверьте исходный случай и соседние отказы доступа.

Первоисточники

Ошибки API должны направлять действия без утечки информации.

Статус HTTP предоставляет начальную категорию, но клиенту может потребоваться стабильный тип и полезные детали. RFC 9457 описывает общую структуру проблем; он не оправдывает раскрытие внутренних трассировок или конфиденциальных данных.

  • Разделяйте постоянный отказ, исправимый ввод и временный сбой.
  • Документируйте тип, статус и возможные действия клиента для каждой важной ошибки.
  • Проверяйте, что ответы не содержат секретов или ненужных полных полезных нагрузок.

Первичный источник: IETF RFC 9457 — Problem Details for HTTP APIs. Связанный метод: прочитать практическое руководство.

Повторы API: считать полный бюджет времени

Задайте предел вызовов и общий срок.

Вымышленный учебный случай: числа не описывают CIE или клиентов.

Вымышленная модель: четыре вызова до 250 мс, ожидания 100, 200 и 400 мс. Исключены jitter, соединение, очереди и локальная проверка.

Всего попыток
41 + 3
Сумма ожиданий (мс)
700100 + 200 + 400
Бюджет модели (мс)
17004 × 250 + 700
Разобрать последовательность
ШагМаксимум вызова (мс)Следующее ожидание (мс)
Попытка 1250100
Попытка 2250200
Попытка 3250400
Попытка 42500
Всего1000700
Время модели (мс)
  • Время вызовов1 000
  • Сумма ожиданий700
  • Общий срок (мс)1 500

Проверки перед выводом

  1. 1 000 + 700 = 1 700 мс превышают срок 1 500 мс.
  2. Передавайте общий срок и исключайте дубли эффектов; timeout не доказывает удалённую отмену.

Проверить бюджет повторов

n × T + W × (2^(n−1) − 1)

Связанный метод: прочитать практическое руководство.

Ошибки API: типы, статусы и доказательства

Подробные справочные заметки в этой версии доступны на английском.

Handle an error without parsing its sentence

An API client may receive a translated title, missing member or unfamiliar extension. Preserve decisions based on the documented type and HTTP status, then connect a safe action to the context.

  • Compare received status and JSON status without silently replacing either.
  • Test absent type, string status instead of a number, and an unknown extension.
  • Separate person-facing text, business code and occurrence reference.

Explore problem types and eight fictional responses →

IETF · M. Nottingham, E. Wilde, S. Dalal · RFC 9457 · July 2023 · obsoletes RFC 7807 · §3.1, §3.2, §4.2, §5