Uso de API
Puedes usar cualquier URL de Firebase Realtime Database como extremo de REST. Todo lo que necesitas
agregar .json
al final de la URL y enviar una solicitud
desde tu cliente HTTPS favorito.
Se requiere HTTPS. Firebase solo responde al tráfico encriptado para que tus datos permanezcan seguros.
GET: Lectura de datos
Los datos de tu Realtime Database se pueden leer con una emisión HTTP
GET
a un extremo. El siguiente ejemplo
demuestra cómo podrías recuperar el ID de un usuario
que habías almacenado en Realtime Database.
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Una solicitud correcta se indica mediante un código de estado HTTP 200 OK
. La respuesta contiene los datos asociados con el
ruta de acceso en la solicitud GET
.
{ "first": "Jack", "last": "Sparrow" }
PUT: escritura de datos
Puedes escribir datos con una solicitud PUT
.
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Una solicitud correcta se indica mediante un código de estado HTTP 200 OK
. La respuesta contiene los datos especificados en el
PUT
solicitud.
{ "first": "Jack", "last": "Sparrow" }
POST: Envío de datos
Para lograr el equivalente de push()
de JavaScript
(consulta las Listas de datos)
puedes emitir una solicitud POST
.
curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' \ 'https://[PROJECT_ID].firebaseio.com/message_list.json'
Un estado HTTP 200 OK
indica una solicitud correcta
código. La respuesta contiene el nombre secundario de los datos nuevos
se especifica en la solicitud POST
.
{ "name": "-INOQPH-aV_psbk3ZXEX" }
PATCH: Actualización de datos
Puedes actualizar elementos secundarios específicos en una ubicación sin reemplazarlos
datos existentes mediante una solicitud PATCH
Hijos nombrados en
los datos que se escriben con PATCH
se reemplazan, pero se omiten.
no se borran los niños. Esto es equivalente a la secuencia de comandos
función update()
.
curl -X PATCH -d '{"last":"Jones"}' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'
Un estado HTTP 200 OK
indica una solicitud correcta
código. La respuesta contiene los datos especificados en el
PATCH
solicitud.
{ "last": "Jones" }
DELETE: eliminación de datos
Puedes borrar datos con una solicitud DELETE
:
curl -X DELETE \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Una solicitud DELETE
exitosa se indica mediante un
Código de estado HTTP 200 OK
con una respuesta que contiene JSON
null
Anulación de método
Si realizas llamadas REST desde un navegador que no admite las
métodos anteriores, puedes anular el método de la solicitud con una
POST
y la configuración de tu método mediante
el encabezado de la solicitud X-HTTP-Method-Override
curl -X POST -H "X-HTTP-Method-Override: DELETE" \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
También puedes usar el parámetro de consulta x-http-method-override
.
curl -X POST \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json?x-http-method-override=DELETE'
Solicitudes condicionales
Las solicitudes condicionales, el equivalente de REST de las operaciones de transacción del SDK, actualizan los datos según una condición determinada. Consulta una descripción general del flujo de trabajo y obtén más información sobre las solicitudes condicionales para REST en Cómo guardar datos.
ETag de Firebase
La ETag de Firebase es el identificador único de los datos actuales en una ubicación especificada. Si el botón
si los datos cambian en esa ubicación, la ETag también cambia. El ETag de Firebase se debe especificar en el
para la solicitud de REST inicial (por lo general, un
GET
, pero puede ser cualquier otro valor que no sea PATCH
).
curl -i 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
if-match
La condición if-match
especifica el valor de ETag para los datos que deseas actualizar.
Si usas la condición, Realtime Database solo completa las solicitudes en las que la ETag especificada en el
coincide con la ETag de los datos existentes en la base de datos. Obtén el
ETag en una ubicación con una solicitud de ETag de Firebase. Si deseas sobrescribir cualquier ubicación que
null, usa null_etag
.
curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match: [ETAG_VALUE]'
Respuestas esperadas
En la siguiente tabla, se proporciona una descripción general de las respuestas esperadas para cada tipo de solicitud: según la coincidencia de ETag.
Tipo de solicitud | "X-Firebase-ETag: true" | La ETag coincide con if_match: <matching etag> |
La ETag no coincide con if_match: <no matching etag> |
|
---|---|---|---|---|
OBTÉN | Estado/contenido de la respuesta | 200: “<data_at_path>” | 400: "...no compatible..." | 400: "...no compatible..." |
Encabezados agregados | ETag: <ETag_of_data> | N/A | N/A | |
PON | Estado/contenido de la respuesta | 200: “<put_data>” | 200: “<put_data>” | 412: “...ETag no coincide...” |
Encabezados agregados | ETag: <ETag_of_put_data> | N/A | ETag: <database_ETag> | |
PUBLICAR | Estado/contenido de la respuesta | 200: “<post_data>” | 400: "...no compatible..." | 400: "...no compatible..." |
Encabezados agregados | ETag: <ETag_of_post_data> | N/A | N/A | |
PATCH | Estado/contenido de la respuesta | 400: "...no compatible..." | 400: "...no compatible..." | 400: "...no compatible..." |
Encabezados agregados | N/A | N/A | N/A | |
BORRAR | Estado/contenido de la respuesta | 200: nulo | 200: “<data_after_put>” | 412: “...ETag no coincide...” |
Encabezados agregados | ETag: <ETag_of_null> | N/A | ETag: <database_ETag> |
Parámetros de búsqueda
La API de REST de Firebase Database acepta los siguientes parámetros de consulta y valores:
access_token
Es compatible con todos los tipos de solicitud. Autentica esta solicitud para permitir acceso a los datos protegidos por Firebase Realtime Database Security Rules. Consulta el Documentación de autenticación de REST para obtener más detalles
curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'
shallow
Se trata de una función avanzada, diseñada para ayudarte a trabajar con modelos
conjuntos de datos sin tener que descargarlo todo. Establecer como
true
para limitar la profundidad de los datos que se muestran
en una ubicación. Si los datos en la ubicación son un primitivo de JSON
(cadena, número o booleano), su valor simplemente se devolverá. Si el botón
instantánea de datos en la ubicación es un objeto JSON, el
los valores de cada clave se truncarán a true
.
Argumentos | Métodos REST | Descripción |
---|---|---|
superficial | GET | Limita la profundidad de la respuesta. |
curl 'https://[PROJECT_ID].firebaseio/.json?shallow=true'
Ten en cuenta que shallow
no se puede combinar con ninguna otra consulta
parámetros.
Da formato a los datos que se muestran en la respuesta del servidor.
Argumentos | Métodos REST | Descripción |
---|---|---|
bonito | GET, PUT, POST, PATCH y DELETE | Visualizar los datos en un formato legible por humanos |
silencioso | GET, PUT, POST o PATCH |
Se usa para suprimir la salida del servidor cuando se escriben datos.
La respuesta resultante estará vacía y se indicará
Un código de estado 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'
callback
Solo es compatible con GET
. Realizar llamadas de REST desde un navegador web
entre dominios, puedes usar JSONP para unir la respuesta en un código
función de devolución de llamada. Agrega callback=
para unir la API de REST
los datos devueltos en la función de devolución de llamada que especifiques.
<script> function gotData(data) { console.log(data); } </script> <script src="https://[PROJECT_ID].firebaseio.com/.json?callback=gotData"></script>
formato
Si se establece en export
, el servidor codificará las prioridades en la
respuesta.
Argumentos | Métodos REST | Descripción |
---|---|---|
exportar | GET | Incluye información de prioridad en la respuesta. |
curl 'https://[PROJECT_ID].firebaseio.com/.json?format=export'
descarga
Solo es compatible con GET
. Si quieres activar un archivo
descarga de datos de un navegador web, agrega download=
.
Esto hace que el servicio de REST agregue los encabezados adecuados para que
los navegadores saben que deben guardar
los datos en un archivo.
curl 'https://[PROJECT_ID].firebaseio/.json?download=myfilename.txt'
tiempo de espera agotado
Úsalo para limitar el tiempo que tarda la lectura en el servidor. Si una operación de lectura no finaliza en el tiempo asignado, termina con una solicitud error 400. Esto es muy útil cuando esperas que la transferencia de datos sea pequeña y no queremos esperar demasiado para recuperar un subárbol potencialmente enorme. Real el tiempo de lectura puede variar según el tamaño de los datos y el almacenamiento en caché.
Especifica timeouts
con el siguiente formato: 3ms
.
3s
o 3min
, con un número y una unidad. Si no es así
especificado, la timeout
máxima de 15min
será
se aplicó. Si el valor de timeout
no es positivo o excede el máximo,
la solicitud se rechazará con un error HTTP 400.
writeSizeLimit
Para limitar el tamaño de una operación de escritura, puede especificar el parámetro de consulta
writeSizeLimit
como
tiny
(objetivo=1 s), small
(objetivo=10 s),
medium
(objetivo: 30 s), large
(objetivo: 60 s).
Realtime Database estima el tamaño de cada solicitud de escritura y se anula
solicitudes que tardarán más que el tiempo objetivo.
Si especificas unlimited
, escrituras excepcionalmente grandes (con carga útil de hasta 256 MB)
están permitidos, lo que podría bloquear las solicitudes posteriores mientras la base de datos procesa el
operación actual. Las escrituras no se pueden cancelar una vez que llegan al servidor.
curl -X DELETE 'https://docs-examples.firebaseio.com/rest/delete-data.json?writeSizeLimit=medium'
Si la escritura es demasiado grande, verás el siguiente mensaje de error:
Error: WRITE_TOO_BIG: Data to write exceeds the maximum size that can be modified with a single request.
Además, puedes configurar el defaultWriteSizeLimit
para toda la base de datos.
con Firebase CLI. Este límite se aplica a todas las solicitudes, incluidas las que provienen de SDKs.
Se crean bases de datos nuevas con defaultWriteSizeLimit
establecido en large
.
No puedes configurar defaultWriteSizeLimit
como tiny
con Firebase CLI.
firebase database:settings:set defaultWriteSizeLimit large
orderBy
Consulta la sección en la guía sobre datos ordenados para obtener más información.
limitToFirst, limitToLast, startAt, endAt, equalTo
Consulta la sección en la guía sobre filtrar datos para más información.
Transmisión desde la API de REST
Los extremos de REST de Firebase admiten la Eventos de EventSource / enviados por el servidor protocolo. Para transmitir los cambios a una sola ubicación de tu Realtime Database, sigue estos pasos: debes hacer lo siguiente:
- Establecer el encabezado Accept del cliente en
"text/event-stream"
- Respetar los redireccionamientos HTTP; específicamente, el código de estado HTTP 307.
-
Si la ubicación requiere permiso de lectura, debes incluir el
Parámetro
auth
A cambio, el servidor enviará eventos con nombre como el estado de los datos en
los cambios de URL solicitados. La estructura de estos mensajes se ajusta a
el protocolo EventSource
.
event: event name data: JSON encoded data payload
El servidor puede enviar los siguientes eventos:
put
Los datos con codificación JSON son un objeto con dos claves: path y datos. La clave path apunta a una en relación con la URL de la solicitud. El cliente debe reemplazar todos los datos que se encuentran en esa ubicación en su caché con data.
patch
Los datos con codificación JSON son un objeto con dos claves: path y datos. La clave path apunta a una en relación con la URL de la solicitud. Para cada clave en data, el cliente debe reemplazar el correspondiente en su caché con los datos de esa clave en el mensaje.
keep-alive
Los datos de este evento son null
. No es necesario que realices ninguna acción.
cancelar
Algunos errores inesperados pueden enviar un evento "cancel" y finalizar la conexión. La causa se describe en los datos proporcionados para este evento. Algunas causas potenciales son las siguientes: sigue: 1) Firebase Realtime Database Security Rules ya no permite una lectura en la ubicación solicitada. El La descripción "data" de esta causa es "Permiso denegado". 2. Una operación de escritura activó un transmisor de eventos que envió un gran árbol JSON que supera nuestro límite. 512MB. El `data` para esta causa es "La carga útil especificada es demasiado grande. Solicita una con menos datos".
auth_revoked
Los datos de este evento son una cadena que indica que la credencial
ha caducado. Este evento se envía cuando el elemento auth
proporcionado
ya no es válido.
Este es un ejemplo de conjunto de eventos que el servidor puede enviar:
// 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}}
Prioridades
Se puede hacer referencia a la información prioritaria de una ubicación con una
"hijo virtual" con el nombre .priority
. Puedes leer las prioridades con
GET
y las escribe con solicitudes PUT
.
Por ejemplo, la siguiente solicitud recupera la prioridad del
Nodo users/tom
:
curl 'https://[PROJECT_ID].firebaseio/users/tom/.priority.json'
Para escribir prioridades y datos al mismo tiempo, puedes agregar una
.priority
secundario a la carga útil de JSON:
curl -X PUT -d '{"name": {"first": "Tom"}, ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom.json'
Para escribir una prioridad y un valor primitivo (p.ej., una cadena) al mismo tiempo,
puedes agregar un elemento secundario .priority
y colocar el valor primitivo
En un elemento secundario .value
:
curl -X PUT -d '{".value": "Tom", ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom/name/first.json'
Esto escribe "Tom"
con una prioridad de 1.0
.
Las prioridades se pueden incluir en cualquier profundidad en la carga útil de JSON.
Valores del servidor
Puedes escribir valores de servidor en una ubicación usando un valor de marcador de posición que
es un objeto con una sola clave .sv
. El valor de esa clave es
el tipo de valor de servidor que deseas establecer. Por ejemplo, el siguiente
request establece el valor del nodo en el valor actual
marca de tiempo:
curl -X PUT -d '{".sv": "timestamp"}' \ 'https://[PROJECT_ID].firebaseio/users/tom/startedAtTime.json'
También puedes escribir prioridades usando valores de servidor mediante el "hijo virtual" de la ruta que se indica arriba.
Entre los valores de servidor admitidos, se incluyen los siguientes:
Valor del servidor | |
---|---|
timestamp | Indica el tiempo transcurrido desde la época UNIX, en milisegundos. |
incremento | Proporciona un número entero o un valor delta de punto flotante
{ ".sv": {"increment": <delta_value> }} , con el que se usará
incrementar el valor actual de la base de datos. Si los datos aún no existen, se establecerá la actualización
los datos al valor delta. Si el valor delta o los datos existentes están flotantes
números de punto, ambos valores se interpretarán como números de punto flotante y se aplicarán en el
el backend como un valor doble. La aritmética doble y la representación de los valores dobles siguen
Semántica de IEEE 754. Si hay un desbordamiento de números enteros positivos o negativos, la suma se calcula
como un doble. |
Recuperando y actualizando Firebase Realtime Database Security Rules
La API de REST también se puede usar para recuperar y actualizar el Firebase Realtime Database Security Rules para tu proyecto de Firebase. Necesitarás el secreto de tu proyecto de Firebase, que que puedes encontrar en la Panel Cuentas de servicio del directorio de tu proyecto de Firebase del lugar.
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'
Autentica solicitudes
De forma predeterminada, las solicitudes de REST se ejecutan sin autenticación y solo tendrán éxito si la
Las reglas Realtime Database permiten el acceso público de lectura o escritura a
los datos. Para autenticar tu solicitud, usa el
Parámetros de consulta access_token=
o auth=
.
Obtén más información sobre la autenticación a través de la API de REST en Autentica solicitudes de REST.
Condiciones de error
La API de REST de Firebase Database puede mostrar los siguientes códigos de error.
Códigos de estado de HTTP | |
---|---|
400 Solicitud incorrecta |
Una de las siguientes condiciones de error:
|
401 Sin autorización |
Una de las siguientes condiciones de error:
|
404 No se encuentra | No se encontró el Realtime Database especificado. |
500 Error interno del servidor | El servidor mostró un error. Consulta el mensaje de error para obtener más información más detalles. |
503 Servicio no disponible | La Firebase Realtime Database especificada no está disponible temporalmente. lo que significa que la solicitud no se intentó. |
412 Error de condición previa | El valor de ETag especificado de la solicitud en el encabezado if-match no coincide con el valor del servidor. |