Какова лучшая практика для создания API, который требует много времени для ответа? - PullRequest
0 голосов
/ 09 апреля 2020

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

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

Есть ли лучший способ go об этом? Должен ли быть ответ webhook вместо того, чтобы просить пользователей дважды запрашивать API?

1 Ответ

3 голосов
/ 09 апреля 2020

Три основных способа, которые я видел:

  1. Клиент отправляет запрос API и немедленно возвращает номер задания. Затем клиент может отправлять различные запросы API с этим номером задания очень часто (каждую минуту или около того, в зависимости от того, сколько времени занимает получение обычного результата), поэтому проверяйте ход выполнения. На одной из этих проверок будет выполнено задание и получены данные.

  2. Клиент устанавливает webSocket или socket.io . Клиент отправляет запрос через это соединение websocket / socket.io. Сервер начинает работать на результат. Когда результат готов, он немедленно отправляется клиенту через соединение webSocket / socket.io. Затем клиент может оставить соединение websocket / socket.io подключенным для других запросов или закрыть соединение.

  3. Использовать Отправленные на сервер события . Отправить, запрос, а затем, когда результат будет выполнен, сервер может отправить его обратно по тому же соединению.

Я не думаю, что среди этих трех есть «наилучшая практика», так как у каждого есть свои преимущества и некоторые другие виды использования, которые могут иметь отношение к делу. Вариант опроса № 1 является наименьшим общим знаменателем и будет работать в любой ситуации, но требует от клиента стратегии опроса и может иметь некоторую задержку (результат готов до опроса клиента).

Варианты № 2 и # 3 очень эффективны, и их общая технология может иметь и другое применение.

...