Перейти к содержанию

Стиль “Запрос-асинхронный ответ”

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

Схема

Pasted image 20230502114908.png

  1. Клиент отправляет запрос (постановку задачи);
  2. генерируется идентификатор задачи, сохраняется в БД со статусом “в процессе”;
  3. идентификатор возвращается клиенту;
  4. сервис ставит задачу в очередь выполнения;
  5. очередь разбирается и задача выполняется;
  6. результат сохраняется в БД вместе со сменой статуса;
  7. клиент периодически опрашивает API о состоянии задачи;
  8. состояние задачи API получает из БД, возвращает клиенту.

Последнее обновление : 5 июля 2023 г.
Дата создания : 25 июля 2022 г.

Комментарии

Комментарии