#машины_разное #деньги
Что-то катастрофически пошло не так в момент, когда сервисы стали показывать абсолютно бесполезное “Oops, something went wrong” в браузерах и мобильных приложениях.
Начнем с очевидного. Все эти бесполезные “Oops” прилетают, когда где-то в глубинах бизнес логики стреляет необработанное исключение. Логика у всех backend’ов для таких случаев тупа как пробка - тащим 5ХХ на самый вверх до клиента. Клиент видит “Oops”.
Backend тоже не лыком шит, от одной ошибки он складывать лапки не станет. Внутри этих ваших распределенных систем есть повторы, проверка контекста, DLQ и прочие механизмы обеспечения гарантированности транзакций. Ошибки же бывают retryable/повторяемые (
пакет на сети потеряли, можем повторить) и nonretryable/неповторяемые (
система лежит и не выкупает, что делать). Очевидно, когда надо использовать то или иное.
Проблемы могут быть и внешними, например, запросы к поставщикам. И вот тут мякотка.
Допустим, поставщик принес вам неприятный ответ, который вы не смогли обработать. Вы, конечно же, стреляете 500-ыми, ответ с ошибкой идет вплоть до клиента, клиент видит “Я не шмогла, попробуй еще попозже”. Вот это “
попробуй еще попозже” называется user retryable, т.е. бекэнд как бы не смог обработать, что там ему поставщик брякнул, но поставщик проспится и все будет хорошо.
Вроде все круто, да?
А что если та ошибка, которую вернули клиенту, неповторяемая? Например, наш поставщик VISA вернул нам ошибку, что карта устарела или банковский счет заблокирован. Мы не умеем корректно обрабатывать такие отбивки и отправляем клиенту наверх 500-ый. Клиент пробует снова, но счета от таких повторов не разблокируются, а срок годности карточек не продлевается. Более того, можно еще и за abuse отхватить.
VISA, кстати, за
попытки повторить невалидные транзакции штрафует коммерсанта. Коммерсант страдает, но клиент-то ни сном, ни духом и жмякает да жмякает кнопочку “оплатить”. И ловит, да ловит “Упс, самфин вент вронг” и бомбит. А коммерсант за это пенни штрафные платит.
К чему я это все? Возвращайте нормальные ошибки клиентам, пожалуйста.