Стиль “Запрос-асинхронный ответ”¶
Запрос-асинхронный ответ — стиль асинхронной коммуникации, при котором клиент отправляет запрос, рассчитывая получить ответ “когда-нибудь”.
Также, по видимому, переводится как “асинхронный запрос-ответ”.
Идея в том, что мы ставим затратную по времени задачу посредством синхронного API, синхронно получая результат создания задачи, например, идентификатор заказа, или сообщение об ошибке в случае неудачной операции. Одновременно с этим задача ставится на асинхронное выполнение, например, через очередь. Клиент периодически опрашивает сервер о готовности.
При реализации стиля рекомендуется использовать экспоненциально-растущее время ретрая, которое может быть задано как на клиенте, так и на сервере (в этом случае клиенту возвращается интервал типа RetryAfter, возможно, в HTTP-заголовки). Также рекомендуется предусмотреть возможность отмены операции.
Схема¶
- Клиент отправляет запрос (постановку задачи);
- генерируется идентификатор задачи, сохраняется в БД со статусом “в процессе”;
- идентификатор возвращается клиенту;
- сервис ставит задачу в очередь выполнения;
- очередь разбирается и задача выполняется;
- результат сохраняется в БД вместе со сменой статуса;
- клиент периодически опрашивает API о состоянии задачи;
- состояние задачи API получает из БД, возвращает клиенту.
Дата создания : 25 июля 2022 г.
