Нужны проверка владельца счёта, точное представление суммы, единая транзакция, защита конкурентного списания и идемпотентность. Два независимых UPDATE могут оставить деньги списанными без зачисления.
Что исправить в FastAPI-сервисе перевода средств
Нужны проверка владельца счёта, точное представление суммы, единая транзакция, защита конкурентного списания и идемпотентность. Два независимых UPDATE могут оставить деньги списанными без зачисления.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Учебный endpoint принимает отправителя, получателя и float-сумму, затем отдельно уменьшает и увеличивает балансы. Нет идемпотентности и транзакции. Какие риски исправить?
Ответ
Нужны проверка владельца счёта, точное представление суммы, единая транзакция, защита конкурентного списания и идемпотентность. Два независимых UPDATE могут оставить деньги списанными без зачисления.
Храните сумму в минимальных единицах либо согласованном decimal-формате. Зафиксируйте порядок блокировок счетов, проверьте положительность суммы, валюту и остаток. Повтор запроса должен вернуть тот же результат, а не новый перевод. Синхронный драйвер БД нельзя просто вызывать внутри async endpoint, рассчитывая на неблокирующее поведение.
Источник: fastapi.tiangolo.com.