Оптимальный подход — использовать HTTP-коды, которые максимально точно отражают суть ошибки, чтобы клиент мог правильно их интерпретировать:
При интеграции с внешней системой CRM (SOAP) в ответ можно получить:
Оптимальный подход — использовать 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 и облегчает интеграцию и отладку.