DZone.com Feed на русском
Подписаться
Запрос истек, но платеж прошел: создание безопасных мобильных API с повторными попытками
Мобильные сети печально известны своей ненадежностью. Распространенный сценарий: пользователь нажимает "Оплатить сейчас" в приложении, запрос на оплату достигает сервера и обрабатывается, но ответ сети никогда не доходит до телефона. Клиент предполагает, что запрос не удался, и повторяет попытку, что приводит к двойному списанию средств. Именно такого рода ошибку решает идемпотентность.Идемпотентность означает, что повторение той же операции не имеет дополнительных эффектов, и вторая попытка должна распознать, что это дубликат, и не делать ничего нового. На практике мобильные разработчики должны рассматривать API платежей или заказов как идемпотентные, прикрепляя уникальные идентификаторы операций к запросам и дедуплицируя их на стороне сервера. С таким подходом, даже если сеть потеряет ответ или пользователь дважды нажмет кнопку, с пользователя будет списана сумма только один раз.