Выполнение условных обновлений с помощью 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
вызов. Это звучит как разумный запрос функции, поэтому я бы порекомендовал вам подать запрос функции . Но нет никаких гарантий относительно того, будет ли / когда это будет реализовано.