Как проверить, изменился ли eTag, полученный из базы данных firebase, при использовании firebase REST API? - PullRequest
0 голосов
/ 10 сентября 2018

Я нашел способы условно обновить или записать данные в базу данных с помощью eTag. Но я хочу Считать (GET) измененные данные из базы данных, если данные изменились, используя REST API и , чтобы не обновлять данные

Я пытаюсь внедрить кэш базы данных на стороне сервера и хочу обновить кеш, если он устарел (eTag изменился).

1 Ответ

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

Выполнение условных обновлений с помощью REST API является многоэтапным процессом:

  • Всякий раз, когда вы читаете данные из базы данных, вам необходимо убедиться, что вы также запрашиваете ETag, передавая заголовок X-Firebase-ETag со значением true.
  • Firebase ответит данными и заголовком ETag в ответе, например ETag: ViJFJowpbyRvgGNPzPJdGeN+mCY=
  • Вам необходимо хранить ETag в том же месте, где вы храните данные.

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

  • Считайте существующее ETag для этого местоположения из вашего кэша.
  • Передайте ETag в заголовке if-match в запрос на запись с вашими новыми данными, например: -H 'if-match: ViJFJowpbyRvgGNPzPJdGeN+mCY='

На этом этапе сервер базы данных Firebase Realtime сравнивает ваше значение ETag с ETag для текущих данных. Есть две возможности:

  • Если значения ETag одинаковы (т. Е. Если данные не были изменены), ваша запись сохраняется в хранилище.
  • Если значения ETag отличаются (т. Е. Если данные на сервере были обновлены), ваша запись отклоняется, и вы возвращаете обновленные данные и ETag в ответе. На этом этапе вы должны записать новые данные и ETag в кэш и повторить обновление на основе этих значений.

Подробнее об этом см .:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...