Как я могу что-то сделать в Rails только в том случае, если ответ на клиент преуспевает?

97
6

Я хотел бы иметь действие, которое форматирует ответ, отвечает клиенту, а затем записывает что-то в базу данных только в том случае, если клиенту удастся получить ответ. Из того, что я понимаю в after_filters, они только перехватывают ответ до его отправки клиенту. Есть идеи?

спросил(а) 2021-01-19T19:09:22+03:00 2 месяца, 3 недели назад
1
Решение
106

Насколько я знаю, нет надежного способа подтвердить, что клиент получил сообщение на уровне приложения, кроме указания поручить клиенту отправить дополнительный запрос, например, с помощью javascript.

Вместо того, чтобы полагаться на клиента для получения вашего сообщения 200, я бы поставил список успешных транзакций с API где-то еще в API, чтобы клиент мог проактивно посетить этот список, чтобы убедиться, что транзакции прошли.

ответил(а) 2021-01-19T19:09:22+03:00 2 месяца, 3 недели назад
44

Я думаю, что это разумная вещь, несмотря на другого комментатора. Я согласен с его подходом написать javascript, который отправляет подтверждение.


Я бы не оставил транзакцию открытой так долго, поэтому я рекомендую сохранять данные с предварительным флагом, а затем, когда вы получите подтверждение, отметьте данные как подтвержденные.

ответил(а) 2021-01-19T19:09:22+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема