Использование API
Вы можете использовать любой URL-адрес базы данных Firebase Realtime в качестве конечной точки REST. Все, что вам нужно сделать, это добавить .json
в конец URL-адреса и отправить запрос от вашего любимого HTTPS-клиента.
Требуется HTTPS. Firebase реагирует только на зашифрованный трафик, поэтому ваши данные остаются в безопасности.
GET — чтение данных
Данные из вашей Realtime Database можно прочитать, отправив HTTP-запрос GET
к конечной точке. В следующем примере показано, как можно получить имя пользователя, которое вы ранее сохранили в Realtime Database .
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Успешный запрос обозначается кодом состояния HTTP 200 OK
. Ответ содержит данные, связанные с путем в запросе GET
.
{ "first": "Jack", "last": "Sparrow" }
PUT — запись данных
Вы можете записать данные с помощью запроса PUT
.
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Успешный запрос обозначается кодом состояния HTTP 200 OK
. Ответ содержит данные, указанные в запросе PUT
.
{ "first": "Jack", "last": "Sparrow" }
POST — отправка данных
Чтобы выполнить эквивалент метода JavaScript push()
(см. Списки данных ), вы можете выполнить запрос POST
.
curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' \ 'https://[PROJECT_ID].firebaseio.com/message_list.json'
Успешный запрос обозначается кодом состояния HTTP 200 OK
. Ответ содержит дочернее имя новых данных, указанных в запросе POST
.
{ "name": "-INOQPH-aV_psbk3ZXEX" }
ПАТЧ - Обновление данных
Вы можете обновить определенные дочерние элементы в определенном месте, не перезаписывая существующие данные, используя запрос PATCH
. Именованные дочерние элементы в данных, записываемых с помощью PATCH
перезаписываются, но пропущенные дочерние элементы не удаляются. Это эквивалентно функции update()
в JavaScript.
curl -X PATCH -d '{"last":"Jones"}' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'
Успешный запрос обозначается кодом состояния HTTP 200 OK
. Ответ содержит данные, указанные в запросе PATCH
.
{ "last": "Jones" }
УДАЛИТЬ – Удаление данных
Вы можете удалить данные с помощью запроса DELETE
:
curl -X DELETE \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Успешный запрос DELETE
обозначается кодом состояния HTTP 200 OK
с ответом, содержащим значение JSON null
.
Переопределение метода
Если вы выполняете вызовы REST из браузера, который не поддерживает предыдущие методы, вы можете переопределить метод запроса, выполнив запрос POST
и установив свой метод с помощью заголовка запроса X-HTTP-Method-Override
.
curl -X POST -H "X-HTTP-Method-Override: DELETE" \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Вы также можете использовать параметр запроса x-http-method-override
.
curl -X POST \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json?x-http-method-override=DELETE'
Условные запросы
Условные запросы, REST-эквивалент транзакционных операций SDK, обновляют данные в соответствии с определенным условием. Ознакомьтесь с обзором рабочего процесса и узнайте больше об условных запросах для REST в разделе Сохранение данных .
Firebase ETag
Firebase ETag — это уникальный идентификатор текущих данных в указанном месте. Если данные изменяются в этом месте, ETag также меняется. ETag Firebase должен быть указан в заголовке первоначального запроса REST (обычно GET
, но может быть чем угодно, кроме PATCH
).
curl -i 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
если-соответствие
Условие if-match
указывает значение ETag для данных, которые вы хотите обновить. Если вы используете это условие, Realtime Database выполняет только те запросы, в которых ETag, указанный в запросе на запись, соответствует ETag существующих данных в базе данных. Получите ETag в месте с помощью запроса ETag Firebase. Если вы хотите перезаписать любое местоположение, имеющее значение null, используйте null_etag
.
curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match: [ETAG_VALUE]'
Ожидаемые ответы
В следующей таблице представлен обзор ожидаемых ответов для каждого типа запроса на основе соответствия ETag.
Тип запроса | 'X-Firebase-ETag: правда' | ETag совпаденияif_match: <matching etag> | ETag не соответствуетif_match: <no matching etag> | |
---|---|---|---|---|
ПОЛУЧАТЬ | Статус/содержание ответа | 200: "<data_at_path>" | 400: «...не поддерживается.» | 400: «...не поддерживается.» |
Добавлены заголовки | ETag: <ETag_data> | Н/Д | Н/Д | |
ПОМЕЩАТЬ | Статус/содержание ответа | 200: "<вводимые_данные>" | 200: "<вводимые_данные>" | 412: «...Несоответствие ETag.» |
Добавлены заголовки | ETag: <ETag_put_data> | Н/Д | ETag: <database_ETag> | |
ПОЧТА | Статус/содержание ответа | 200: "<post_data>" | 400: «...не поддерживается.» | 400: «...не поддерживается.» |
Добавлены заголовки | ETag: <ETag_post_data> | Н/Д | Н/Д | |
ПЛАСТЫРЬ | Статус/содержание ответа | 400: «...не поддерживается.» | 400: «...не поддерживается.» | 400: «...не поддерживается.» |
Добавлены заголовки | Н/Д | Н/Д | Н/Д | |
УДАЛИТЬ | Статус/содержание ответа | 200: ноль | 200: "<data_after_put>" | 412: «...Несоответствие ETag.» |
Добавлены заголовки | ETag: <ETag_of_null> | Н/Д | ETag: <database_ETag> |
Параметры запроса
REST API базы данных Firebase принимает следующие параметры и значения запроса:
access_token
Поддерживается всеми типами запросов. Аутентифицирует этот запрос, чтобы разрешить доступ к данным, защищенным Firebase Realtime Database Security Rules . Подробности см. в документации по аутентификации REST .
curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'
мелкий
Это расширенная функция, призванная помочь вам работать с большими наборами данных без необходимости загружать все. Установите для этого параметра значение true
, чтобы ограничить глубину данных, возвращаемых в местоположении. Если данные в этом месте представляют собой примитив JSON (строка, число или логическое значение), его значение будет просто возвращено. Если снимок данных в расположении представляет собой объект JSON, значения для каждого ключа будут усечены до true
.
Аргументы | REST-методы | Описание |
---|---|---|
мелкий | ПОЛУЧАТЬ | Ограничьте глубину ответа. |
curl 'https://[PROJECT_ID].firebaseio/.json?shallow=true'
Обратите внимание, что shallow
нельзя смешивать с другими параметрами запроса.
распечатать
Форматирует данные, возвращаемые в ответе от сервера.
Аргументы | REST-методы | Описание |
---|---|---|
симпатичный | ПОЛУЧИТЬ, ПОСТАВИТЬ, ОТПРАВИТЬ, ИСПРАВИТЬ, УДАЛИТЬ | Просматривайте данные в удобочитаемом формате. |
тихий | ПОЛУЧИТЬ, ПОСТАВИТЬ, ОТПРАВИТЬ, ПАТЧИТЬ | Используется для подавления вывода сервера при записи данных. Результирующий ответ будет пустым и будет обозначен кодом состояния HTTP 204 No Content . |
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=pretty'
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=silent'
перезвонить
Поддерживается только GET
. Чтобы выполнять вызовы REST из веб-браузера между доменами, вы можете использовать JSONP, чтобы обернуть ответ в функцию обратного вызова JavaScript. Добавьте callback=
чтобы REST API обернул возвращаемые данные в указанную вами функцию обратного вызова.
<script> function gotData(data) { console.log(data); } </script> <script src="https://[PROJECT_ID].firebaseio.com/.json?callback=gotData"></script>
формат
Если установлено значение export
, сервер будет кодировать приоритеты в ответе.
Аргументы | REST-методы | Описание |
---|---|---|
экспорт | ПОЛУЧАТЬ | Включите в ответ приоритетную информацию. |
curl 'https://[PROJECT_ID].firebaseio.com/.json?format=export'
скачать
Поддерживается только GET
. Если вы хотите инициировать загрузку файла ваших данных из веб-браузера, добавьте download=
. Это заставляет службу REST добавлять соответствующие заголовки, чтобы браузеры знали, что данные нужно сохранять в файл.
curl 'https://[PROJECT_ID].firebaseio/.json?download=myfilename.txt'
тайм-аут
Используйте это, чтобы ограничить время чтения на стороне сервера. Если запрос на чтение не завершается в течение отведенного времени, он завершается с ошибкой HTTP 400. Это особенно полезно, когда вы ожидаете небольшую передачу данных и не хотите слишком долго ждать, чтобы получить потенциально огромное поддерево. Фактическое время чтения может варьироваться в зависимости от размера данных и кэширования.
Укажите timeouts
в следующем формате: 3ms
, 3s
или 3min
, используя число и единицы измерения. Если не указано, будет применен максимальный timeout
в 15min
. Если timeout
не является положительным или превышает максимальное значение, запрос будет отклонен с ошибкой HTTP 400.
записьSizeLimit
Чтобы ограничить размер записи, вы можете указать параметр запроса writeSizeLimit
как tiny
(цель = 1 с), small
(цель = 10 с), medium
(цель = 30 с), large
(цель = 60 с). База данных реального времени оценивает размер каждого запроса на запись и отменяет запросы, которые занимают больше времени, чем заданное.
Если вы укажете unlimited
операций записи, разрешены исключительно большие записи (с полезной нагрузкой до 256 МБ), что может привести к блокировке последующих запросов, пока база данных обрабатывает текущую операцию. Записи не могут быть отменены после того, как они достигнут сервера.
curl -X DELETE 'https://docs-examples.firebaseio.com/rest/delete-data.json?writeSizeLimit=medium'
Если объем записи слишком велик, вы увидите следующее сообщение об ошибке:
Error: WRITE_TOO_BIG: Data to write exceeds the maximum size that can be modified with a single request.
Кроме того, вы можете установить defaultWriteSizeLimit
для всего экземпляра базы данных с помощью интерфейса командной строки Firebase. Это ограничение распространяется на все запросы, в том числе от SDK. Новые базы данных создаются со defaultWriteSizeLimit
равным large
. Вы не можете установить для defaultWriteSizeLimit
значение tiny
с помощью интерфейса командной строки Firebase.
firebase database:settings:set defaultWriteSizeLimit large
заказать по
Дополнительную информацию см. в разделе руководства по упорядоченным данным .
limitToFirst, limitToLast, startAt, endAt, равныйTo
Дополнительную информацию см. в разделе руководства по фильтрации данных .
Потоковая передача из REST API
Конечные точки REST Firebase поддерживают протокол EventSource/Server-Sent Events . Чтобы выполнить потоковую передачу изменений в одно место в Realtime Database , вам необходимо сделать несколько вещей:
- Установите для заголовка Accept клиента значение
"text/event-stream"
- Соблюдайте перенаправления HTTP, в частности код состояния HTTP 307.
- Если для местоположения требуется разрешение на чтение, вы должны включить параметр
auth
В свою очередь, сервер будет отправлять именованные события при изменении состояния данных по запрошенному URL-адресу. Структура этих сообщений соответствует протоколу EventSource
.
event: event name data: JSON encoded data payload
Сервер может отправлять следующие события:
помещать
Данные в формате JSON — это объект с двумя ключами: путь и данные . Ключ пути указывает на местоположение относительно URL-адреса запроса. Клиент должен заменить все данные в этом месте своего кэша данными .
пластырь
Данные в формате JSON — это объект с двумя ключами: путь и данные . Ключ пути указывает на местоположение относительно URL-адреса запроса. Для каждого ключа в data клиент должен заменить соответствующий ключ в своем кэше данными для этого ключа в сообщении.
поддерживать жизнь
Данные для этого события имеют null
. Никаких действий не требуется.
отмена
Некоторые непредвиденные ошибки могут привести к отправке события отмены и разрыву соединения. Причина описана в данных, предоставленных для этого события. Некоторые потенциальные причины заключаются в следующем: 1. Firebase Realtime Database Security Rules больше не разрешают чтение в запрошенном месте. В `data` описании этой причины указано «Отказано в доступе». 2. При записи активировался стример событий, который отправил большое дерево JSON, размер которого превышает наш лимит в 512 МБ. `Данные` по этой причине: «Указанная полезная нагрузка слишком велика, запросите местоположение с меньшим количеством данных».
auth_revoked
Данные для этого события представляют собой строку, указывающую, что срок действия учетных данных истек. Это событие отправляется, когда предоставленный параметр auth
больше не действителен.
Вот пример набора событий, которые может отправлять сервер:
// Set your entire cache to {"a": 1, "b": 2} event: put data: {"path": "/", "data": {"a": 1, "b": 2}} // Put the new data in your cache under the key 'c', so that the complete cache now looks like: // {"a": 1, "b": 2, "c": {"foo": true, "bar": false}} event: put data: {"path": "/c", "data": {"foo": true, "bar": false}} // For each key in the data, update (or add) the corresponding key in your cache at path /c, // for a final cache of: {"a": 1, "b": 2, "c": {"foo": 3, "bar": false, "baz": 4}} event: patch data: {"path": "/c", "data": {"foo": 3, "baz": 4}}
Приоритеты
На информацию о приоритете местоположения можно обращаться с помощью «виртуального дочернего объекта» с именем .priority
. Вы можете читать приоритеты с помощью запросов GET
и записывать их с помощью запросов PUT
. Например, следующий запрос получает приоритет узла users/tom
:
curl 'https://[PROJECT_ID].firebaseio/users/tom/.priority.json'
Чтобы записать приоритет и данные одновременно, вы можете добавить дочерний элемент .priority
в полезные данные JSON:
curl -X PUT -d '{"name": {"first": "Tom"}, ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom.json'
Чтобы одновременно записать приоритет и примитивное значение (например, строку), вы можете добавить дочерний элемент .priority
и поместить примитивное значение в дочерний элемент .value
:
curl -X PUT -d '{".value": "Tom", ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom/name/first.json'
Это пишет "Tom"
с приоритетом 1.0
. Приоритеты можно включать в полезные данные JSON на любой глубине.
Значения сервера
Вы можете записать значения сервера в определенном месте, используя значение заполнителя, которое представляет собой объект с одним ключом .sv
. Значение этого ключа — это тип значения сервера, которое вы хотите установить. Например, следующий запрос устанавливает значение узла в соответствии с текущей меткой времени сервера Firebase:
curl -X PUT -d '{".sv": "timestamp"}' \ 'https://[PROJECT_ID].firebaseio/users/tom/startedAtTime.json'
Вы также можете записать приоритеты, используя значения сервера, используя указанный выше путь «виртуального дочернего элемента».
Поддерживаемые значения сервера включают:
Значение сервера | |
---|---|
временная метка | Время, прошедшее с эпохи UNIX, в миллисекундах. |
приращение | Укажите целое число или значение дельты с плавающей запятой в форме { ".sv": {"increment": <delta_value> }} , с помощью которого можно атомарно увеличить текущее значение базы данных. Если данные еще не существуют, обновление установит для данных значение дельты. Если значение дельты или существующие данные представляют собой числа с плавающей запятой, оба значения будут интерпретироваться как числа с плавающей запятой и применяться на серверной стороне как двойное значение. Двойная арифметика и представление двойных значений соответствуют семантике IEEE 754. Если имеется положительное/отрицательное целочисленное переполнение, сумма вычисляется как двойная. |
Получение и обновление Firebase Realtime Database Security Rules
REST API также можно использовать для получения и обновления Firebase Realtime Database Security Rules для вашего проекта Firebase. Вам понадобится секрет вашего проекта Firebase, который вы можете найти на панели «Учетные записи служб» в настройках вашего проекта Firebase.
curl 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET' curl -X PUT -d '{ "rules": { ".read": true } }' 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET'
Аутентификация запросов
По умолчанию запросы REST выполняются без аутентификации и будут успешными только в том случае, если правила Realtime Database разрешают общедоступный доступ для чтения или записи к данным. Для аутентификации вашего запроса используйте параметры запроса access_token=
или auth=
.
Дополнительные сведения об аутентификации через REST API см. в разделе Аутентификация запросов REST .
Условия ошибки
REST API базы данных Firebase может возвращать следующие коды ошибок.
Коды состояния HTTP | |
---|---|
400 неверный запрос | Одно из следующих состояний ошибки:
|
401 Несанкционированный | Одно из следующих состояний ошибки:
|
404 Не найден | Указанная Realtime Database не найдена. |
500 Внутренняя ошибка сервера | Сервер вернул ошибку. Дополнительные сведения см. в сообщении об ошибке. |
503 Сервис недоступен | Указанная база данных Firebase Realtime временно недоступна, что означает, что запрос не был предпринят. |
412 Предварительное условие не выполнено | Указанное значение ETag запроса в заголовке if-match не соответствует значению сервера. |
Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2024-08-29 UTC.