Это сфокусировано на разработке веб-приложений на сервере. Я предпочитаю использовать в своем приложении коды состояния HTTP, которые отображаются в моей бизнес логи c. Например, если запрос сделан, а пользователь не найден, я сгенерирую исключение и обработаю его с помощью @ControllerAdvice
или @ExceptionHandler
и сопоставлю с 404, не найденным. Иногда они находятся внутри блоков try catch для регистрации и повторного выброса исключения. Я предпочитаю этот путь, потому что разработчик API может просто посмотреть на код состояния и двигаться дальше, не нужно десериализовать, если это ожидаемая ошибка клиента. Коллега считает, что если это ожидаемое состояние приложения, то все должно быть в основном 200 с телом ответа, содержащим причину сбоя, а не с ожидаемым объектом ответа, потому что выполнение блока catch является дорогой операцией. Мне лично не нравится такой подход, потому что разработчик вашего API должен проверить сущность ответа и попытаться десериализовать его в ожидаемый объект или, если это не удастся, десериализовать его в некоторый известный объект исключения, потому что это всегда 200.
TLDR: Моя проблема в том, что я вижу много статей о том, почему выполнение блоков catch может быть дорогостоящим в зависимости от трассировки стека, и что обработка ошибок не должна быть частью потока управления, но мне трудно согласиться с этим, потому что Spring имеет функциональность как @ControllerAdvice
, @ExceptionHandler
или более новая ResponseStatusException
. Я также не согласен с аргументом, что коды состояния HTTP относятся к протоколу, а 200 означает просто успешную передачу. Если это так, то 401 и 403 должны быть 200, потому что ответ был обработан нормально, у клиента просто не было авторизации или правильной авторизации. Этот аргумент говорит мне, что все должно быть 200 и зачем даже использовать другие коды состояния? Я все еще в начале своей карьеры, поэтому, пожалуйста, прости, если я упускаю что-то очевидное.