Как из сервиса вернуть доменную ошибку и преобразовать её в корректный HTTP-код?

Как из сервиса вернуть доменную ошибку и отдать корректный HTTP-код? Контекст: обработка ошибок в backend-сервисах и API Для представления доменных ошибок применяю исключения (exceptions) либо error objects В…

Короткий ответ

Что ответить на собеседовании

Как из сервиса вернуть доменную ошибку и отдать корректный HTTP-код? Контекст: обработка ошибок в backend-сервисах и API Для представления доменных ошибок применяю исключения (exceptions) либо error objects В сервисном слое создаю специализированные ошибки с описанием причины, например NotFoundError или ValidationError В контроллере либо middleware перехватываю ошибки и связываю их с HTTP-кодами: 400 — ошибки валидации 404 — ресурс отсутствует 403 — доступ запрещён 500 — непредвиденная ошибка Формирую ответ с корректным статусом и информативным JSON, содержащим сообщение об ошибке Для единообразия и удобства сопровождения использую…

Подробный разбор

Ответ с пояснениями

Как из сервиса вернуть доменную ошибку и отдать корректный HTTP-код?

  • Контекст: обработка ошибок в backend-сервисах и API
  • Для представления доменных ошибок применяю исключения (exceptions) либо error objects
  • В сервисном слое создаю специализированные ошибки с описанием причины, например NotFoundError или ValidationError
  • В контроллере либо middleware перехватываю ошибки и связываю их с HTTP-кодами:
  • 400 — ошибки валидации
  • 404 — ресурс отсутствует
  • 403 — доступ запрещён
  • 500 — непредвиденная ошибка
  • Формирую ответ с корректным статусом и информативным JSON, содержащим сообщение об ошибке
  • Для единообразия и удобства сопровождения использую централизованный обработчик ошибок
  • Так доменная логика не зависит от протокола, а взаимодействие клиента с API становится понятнее

Подробный ответ

Основной ответ

Чтобы сервис мог вернуть доменную ошибку с корректным HTTP-кодом, необходимо разделить бизнес-логику и транспортный слой. Обычно сервис выбрасывает или возвращает специальные доменные ошибки — exceptions либо объекты ошибок с контекстом проблемы. Контроллер или API-слой перехватывает их, сопоставляет с HTTP-статусом и отправляет клиенту ответ с соответствующим кодом и сообщением.

Ключевые моменты

  • Определение собственных доменных ошибок: их наследуют от базового класса ошибок и наделяют понятным смыслом, например ValidationError, NotFoundError, BusinessRuleViolationError.
  • Обработка ошибок на уровне контроллера или middleware (в зависимости от фреймворка, например Express в Node.js или ASP.NET middleware) выполняет маппинг каждой доменной ошибки на HTTP-статус: 400 для валидации, 404 — для отсутствующих ресурсов, 409 — для конфликтов.
  • Безопасность и аудит: клиенту следует отправлять только необходимую информацию, а полное описание ошибки сохранять в логах отдельно.
  • В сложных системах также используют паттерн Result / Either: сервис не выбрасывает исключение, а возвращает результат с признаком успеха или ошибки и сопутствующими метаданными.

Практический контекст

Например, в ASP.NET Core 6 можно создать глобальный фильтр исключений (ExceptionFilter), который перехватывает доменные ошибки и возвращает ProblemDetails с нужным HTTP-кодом. В REST API на Spring Boot (Java) применяют @ControllerAdvice: его методы обрабатывают кастомные исключения и передают статус через ResponseEntity. Такой подход упрощает тестирование и сопровождение кода, а также улучшает UX при работе с API.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку