intermediate

REST error response shape

Возвращайте consistent machine-readable errors с codes, messages, field details, correlation IDs и safe diagnostics.

Единообразные error bodies ускоряют обработку на клиенте, поддержку инструментов и корреляцию инцидентов. [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457) — хорошая база.

					{
  "type": "https://api.example.com/errors/validation",
  "title": "Validation failed",
  "status": 422,
  "detail": "Email format is invalid",
  "instance": "/orders/req-abc123",
  "errors": [
    { "field": "email", "code": "invalid_format", "message": "Must be a valid email" }
  ],
  "correlationId": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
				

Правила проектирования:

  • Стабильный `type` или `code` для программной ветвления (не английский prose).
  • Человекочитаемые `title`/`detail` для логов и UI; локализация на клиенте где возможно.
  • Field-level `errors[]` для форм; никаких stack traces или SQL.
  • `correlationId` совпадает с логами и tracing (также `X-Request-Id`).

На интервью: problem+json против ad-hoc `{ error: string }`, маппинг domain errors на HTTP status, что безопасно в public APIs.

Типовые ошибки: новый JSON ошибок на каждый релиз, смешение validation и auth errors, внутренние имена исключений, 200 с флагом ошибки в теле.

Компромисс: богатые детали ошибок против information disclosure — настройка под аудиторию (public vs internal).

Чеклист:

  • Стабильные machine codes; human messages отдельно.
  • correlationId в каждом error response.
  • Field errors для validation; generic message для 500.
  • Каталог ошибок в OpenAPI.