При интеграции с внешней системой CRM (SOAP) в ответ можно получить:

Оптимальный подход — использовать HTTP-коды, которые максимально точно отражают суть ошибки, чтобы клиент мог правильно их интерпретировать:

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

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

Оптимальный подход — использовать HTTP-коды, которые максимально точно отражают суть ошибки, чтобы клиент мог правильно их интерпретировать:

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

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

Условие

При интеграции с внешней системой CRM (SOAP) в ответ можно получить:

  • Fault AUTH_FAILED
  • Fault VALIDATION_ERROR (например, некорректный phone)
  • таймаут

Стоит задача сделать crm-adapter (REST внутри контура)

Лучший маппинг:

AUTH_FAILED → 403, VALIDATION_ERROR → 400, timeout → 504

AUTH_FAILED → 500, VALIDATION_ERROR → 500, timeout → 200

AUTH_FAILED → 403, VALIDATION_ERROR → 404, timeout → 409

AUTH_FAILED → 401, VALIDATION_ERROR → 400, timeout → 504

Можно возвращать код 200, а в теле ответа {"error": }

Ответ

Оптимальный подход — использовать HTTP-коды, которые максимально точно отражают суть ошибки, чтобы клиент мог правильно их интерпретировать:

  • AUTH_FAILED → 401 Unauthorized

    • Код 401 означает, что запрос не авторизован, что соответствует ошибке аутентификации.
  • VALIDATION_ERROR → 400 Bad Request

    • Ошибка валидации данных клиента — это ошибка клиента, поэтому 400 подходит лучше всего.
  • timeout → 504 Gateway Timeout

    • Таймаут при обращении к внешнему сервису — это ошибка шлюза или прокси, 504 отражает эту ситуацию.

Возвращать 200 с телом, содержащим ошибку, не рекомендуется, так как это нарушает семантику HTTP и усложняет обработку ошибок на клиенте.

Таким образом, лучший маппинг:

AUTH_FAILED → 401
VALIDATION_ERROR → 400
timeout → 504

Это соответствует стандартам REST и облегчает интеграцию и отладку.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее