Как заставить серверный API сообщать клиентскому API, что доступно обновление - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть оставшийся клиентский API, который обращается к данным через конечную точку /read с моего сервера. Однако у меня есть internal batch service, который вызывает конечную точку моего сервера /write, которая обновляет данные. Поэтому время от времени данные с сервера обновляются. Как мне сообщить клиенту, что данные обновлены, и попросить его снова вызвать конечную точку /read, чтобы получить последние данные?

Ниже приведена диаграмма высокого уровня по сценарию.

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Есть два решения для вашего вопроса:

  1. Использование таймера на клиенте restful для запроса к серверу restful каждые N секунд / минут ... Однако это действительно плохая идея, потому что он должен многократно запрашивать сервер, даже если обновленные данные отсутствуют.

  2. Использование сторонних решений протокола обмена сообщениями на основе публикации и подписки для реализации функции push-уведомлений при каждом обновлении новых данных. Эти решения: Google FCM, MQTT, AMQP

0 голосов
/ 17 сентября 2018

Попробуйте научиться вебхукам?По сути, клиент будет «подписываться» на ваш веб-крючок, или, чтобы упростить его, клиент предоставит конечную точку серверу.Всякий раз, когда есть обновление, ваш сервер просто отправляет запрос клиенту.Клиент должен просто вызвать службу , которая при получении запроса от веб-крюка получает read.

В основном это выглядит так

  • Клиентподписывается на сервер
  • Клиент предоставляет серверу конечную точку /updateAvailable
  • При наличии обновления сервер отправляет запрос конечной точке клиента /updateAvailable
  • '/ updateAvailable'вызывает службу, которая вызывает' / read '

Конечная точка' / updateAvailable 'может вызывать службу, которая обновляет содержимое.Предположим, что отправленный запрос имеет параметр

{
   "updateFound":true
}

Так что, когда клиент '/ updateAvailable' вызывается и получает запрос, вы делаете что-то вроде этого (псевдокод)

if (updateBody.updateFound.message=true)
then call read()

Редактировать

Создав конечную точку для клиента, вы также можете выполнять автоматические обновления.Таким образом, клиент имеет конечную точку /updateAvailable.Сервер отправляет обновление в конечную точку /updateAvailable, которая со стороны клиента вызывает любую службу, используемую для /read

...