Utilizzo dell'API
Puoi utilizzare qualsiasi URL del database Firebase Realtime Database come endpoint REST. Tutto quello che devi fare è aggiungere .json
alla fine dell'URL e inviare una richiesta dal tuo client HTTPS preferito.
È richiesto HTTPS. Firebase risponde solo al traffico crittografato in modo che i tuoi dati rimangano al sicuro.
GET - Lettura dei dati
I dati del tuo Realtime Database possono essere letti inviando una richiesta HTTP GET
a un endpoint. L'esempio seguente dimostra come recuperare il nome di un utente precedentemente archiviato in Realtime Database.
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Una richiesta riuscita è indicata da un codice di stato HTTP 200 OK
. La risposta contiene i dati associati al percorso nella richiesta GET
.
{ "first": "Jack", "last": "Sparrow" }
PUT - Scrittura dei dati
È possibile scrivere dati con una richiesta PUT
.
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Una richiesta riuscita è indicata da un codice di stato HTTP 200 OK
. La risposta contiene i dati specificati nella richiesta PUT
.
{ "first": "Jack", "last": "Sparrow" }
POST - Invio dei dati
Per ottenere l'equivalente del metodo JavaScript push()
(vedi Elenchi di dati ), puoi inviare una richiesta POST
.
curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' \ 'https://[PROJECT_ID].firebaseio.com/message_list.json'
Una richiesta riuscita è indicata da un codice di stato HTTP 200 OK
. La risposta contiene il nome figlio dei nuovi dati specificati nella richiesta POST
.
{ "name": "-INOQPH-aV_psbk3ZXEX" }
PATCH - Aggiornamento dei dati
Puoi aggiornare elementi secondari specifici in una posizione senza sovrascrivere i dati esistenti utilizzando una richiesta PATCH
. I figli con nome nei dati scritti con PATCH
vengono sovrascritti, ma i figli omessi non vengono eliminati. Ciò è equivalente alla funzione JavaScript update()
.
curl -X PATCH -d '{"last":"Jones"}' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'
Una richiesta riuscita è indicata da un codice di stato HTTP 200 OK
. La risposta contiene i dati specificati nella richiesta PATCH
.
{ "last": "Jones" }
DELETE: rimozione dei dati
Puoi eliminare i dati con una richiesta DELETE
:
curl -X DELETE \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Una richiesta DELETE
riuscita è indicata da un codice di stato HTTP 200 OK
con una risposta contenente JSON null
.
Sostituzione del metodo
Se effettui chiamate REST da un browser che non supporta i metodi precedenti, puoi sovrascrivere il metodo di richiesta effettuando una richiesta POST
e impostando il metodo utilizzando l'intestazione della richiesta X-HTTP-Method-Override
.
curl -X POST -H "X-HTTP-Method-Override: DELETE" \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Puoi anche utilizzare il parametro di query x-http-method-override
.
curl -X POST \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json?x-http-method-override=DELETE'
Richieste Condizionate
Le richieste condizionali, l'equivalente REST delle operazioni di transazione dell'SDK, aggiornano i dati in base a una determinata condizione. Visualizza una panoramica del flusso di lavoro e scopri di più sulle richieste condizionali per REST in Salvataggio dei dati .
ETag di Firebase
L'ETag Firebase è l'identificatore univoco per i dati correnti in una posizione specificata. Se i dati cambiano in quella posizione, cambia anche l'ETag. L'ETag Firebase deve essere specificato nell'intestazione della richiesta REST iniziale (in genere un GET
, ma può essere qualsiasi cosa diversa da PATCH
).
curl -i 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
se-corrispondenza
La condizione if-match
specifica il valore ETag per i dati che desideri aggiornare. Se utilizzi la condizione, Realtime Database completa solo le richieste in cui l'ETag specificato nella richiesta di scrittura corrisponde all'ETag dei dati esistenti nel database. Recupera l'ETag in una posizione con una richiesta ETag Firebase. Se desideri sovrascrivere qualsiasi posizione nulla, utilizza null_etag
.
curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match: [ETAG_VALUE]'
Risposte attese
La tabella seguente fornisce una panoramica delle risposte previste per ciascun tipo di richiesta, in base alla corrispondenza ETag.
Tipo di richiesta | 'X-Firebase-ETag: vero' | Corrispondenze ETagif_match: <matching etag> | L'ETag non corrispondeif_match: <no matching etag> | |
---|---|---|---|---|
OTTENERE | Stato/contenuto della risposta | 200: "<data_at_path>" | 400: "...non supportato.." | 400: "...non supportato.." |
Intestazioni aggiunte | ETag: <ETag_di_dati> | N / A | N / A | |
METTERE | Stato/contenuto della risposta | 200: "<inserisci_dati>" | 200: "<inserisci_dati>" | 412: "...ETag non corrispondente.." |
Intestazioni aggiunte | ETag: <ETag_of_put_data> | N / A | ETag: <database_ETag> | |
INVIARE | Stato/contenuto della risposta | 200: "<dati_articolo>" | 400: "...non supportato.." | 400: "...non supportato.." |
Intestazioni aggiunte | ETag: <ETag_of_post_data> | N / A | N / A | |
TOPPA | Stato/contenuto della risposta | 400: "...non supportato.." | 400: "...non supportato.." | 400: "...non supportato.." |
Intestazioni aggiunte | N / A | N / A | N / A | |
ELIMINARE | Stato/contenuto della risposta | 200: nullo | 200: "<dati_dopo_immissione>" | 412: "...ETag non corrispondente.." |
Intestazioni aggiunte | ETag: <ETag_of_null> | N / A | ETag: <database_ETag> |
Parametri della query
L'API REST del database Firebase accetta i seguenti parametri e valori di query:
token di accesso
Supportato da tutti i tipi di richiesta. Autentica questa richiesta per consentire l'accesso ai dati protetti dalle regole di sicurezza del database Firebase Realtime. Consulta la documentazione sull'autenticazione REST per i dettagli.
curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'
poco profondo
Si tratta di una funzionalità avanzata, progettata per aiutarti a lavorare con set di dati di grandi dimensioni senza dover scaricare tutto. Impostalo su true
per limitare la profondità dei dati restituiti in una posizione. Se i dati nella posizione sono una primitiva JSON (stringa, numero o booleano), verrà semplicemente restituito il relativo valore. Se lo snapshot dei dati nella posizione è un oggetto JSON, i valori per ogni chiave verranno troncati a true
.
argomenti | Metodi REST | Descrizione |
---|---|---|
poco profondo | OTTENERE | Limita la profondità della risposta. |
curl 'https://[PROJECT_ID].firebaseio/.json?shallow=true'
Tieni presente che shallow
non può essere combinato con altri parametri di query.
stampa
Formatta i dati restituiti nella risposta dal server.
argomenti | Metodi REST | Descrizione |
---|---|---|
bello | OTTIENI, INSERisci, PUBBLICA, PATCH, ELIMINA | Visualizza i dati in un formato leggibile dall'uomo. |
silenzioso | OTTIENI, metti, pubblica, patch | Utilizzato per sopprimere l'output dal server durante la scrittura dei dati. La risposta risultante sarà vuota e indicata da un codice di stato 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'
richiamare
Supportato solo da GET
. Per effettuare chiamate REST da un browser Web tra domini, puoi utilizzare JSONP per racchiudere la risposta in una funzione di callback JavaScript. Aggiungi callback=
per fare in modo che l'API REST racchiuda i dati restituiti nella funzione di callback specificata.
<script> function gotData(data) { console.log(data); } </script> <script src="https://[PROJECT_ID].firebaseio.com/.json?callback=gotData"></script>
formato
Se impostato su export
, il server codificherà le priorità nella risposta.
argomenti | Metodi REST | Descrizione |
---|---|---|
esportare | OTTENERE | Includere informazioni prioritarie nella risposta. |
curl 'https://[PROJECT_ID].firebaseio.com/.json?format=export'
scaricamento
Supportato solo da GET
. Se desideri attivare il download di un file dei tuoi dati da un browser web, aggiungi download=
. Ciò fa sì che il servizio REST aggiunga le intestazioni appropriate in modo che i browser sappiano che è necessario salvare i dati in un file.
curl 'https://[PROJECT_ID].firebaseio/.json?download=myfilename.txt'
tempo scaduto
Utilizzalo per limitare il tempo impiegato dalla lettura sul lato server. Se una richiesta di lettura non termina entro il tempo assegnato, termina con un errore HTTP 400. Ciò è particolarmente utile quando si prevede un piccolo trasferimento di dati e non si vuole aspettare troppo a lungo per recuperare un sottoalbero potenzialmente enorme. Il tempo di lettura effettivo potrebbe variare in base alle dimensioni dei dati e alla memorizzazione nella cache.
Specificare timeouts
utilizzando il seguente formato: 3ms
, 3s
o 3min
, con un numero e un'unità. Se non specificato verrà applicato il timeout
massimo di 15min
. Se il timeout
non è positivo, o supera il massimo, la richiesta verrà rifiutata con un errore HTTP 400.
writeSizeLimit
Per limitare la dimensione di una scrittura, è possibile specificare il parametro di query writeSizeLimit
come tiny
(target=1s), small
(target=10s), medium
(target=30s), large
(target=60s). Realtime Database stima la dimensione di ciascuna richiesta di scrittura e interrompe le richieste che richiederanno più tempo rispetto al tempo previsto.
Se specifichi unlimited
, sono consentite scritture eccezionalmente grandi (con un carico utile fino a 256 MB), bloccando potenzialmente le richieste successive mentre il database elabora l'operazione corrente. Le scritture non possono essere annullate una volta raggiunto il server.
curl -X DELETE 'https://docs-examples.firebaseio.com/rest/delete-data.json?writeSizeLimit=medium'
Verrà visualizzato il seguente messaggio di errore se la scrittura è troppo grande:
Error: WRITE_TOO_BIG: Data to write exceeds the maximum size that can be modified with a single request.
Inoltre, puoi impostare il defaultWriteSizeLimit
per l'intera istanza del database utilizzando la CLI di Firebase. Questo limite si applica a tutte le richieste, comprese quelle provenienti dagli SDK. I nuovi database vengono creati con defaultWriteSizeLimit
impostato su large
. Non puoi impostare defaultWriteSizeLimit
su tiny
utilizzando la CLI di Firebase.
firebase database:settings:set defaultWriteSizeLimit large
ordinato da
Consulta la sezione della guida sui dati ordinati per maggiori informazioni.
limite al primo, limite all'ultimo, inizio, fine, uguale a
Per ulteriori informazioni consultare la sezione della guida sul filtraggio dei dati .
Streaming dall'API REST
Gli endpoint REST Firebase supportano il protocollo EventSource/Eventi inviati dal server . Per trasmettere le modifiche a una singola posizione nel tuo Realtime Database, devi eseguire alcune operazioni:
- Imposta l'intestazione Accetta del client su
"text/event-stream"
- Rispettare i reindirizzamenti HTTP, in particolare il codice di stato HTTP 307
- Se la posizione richiede l'autorizzazione per la lettura, è necessario includere il parametro
auth
In cambio, il server invierà eventi denominati man mano che lo stato dei dati nell'URL richiesto cambia. La struttura di questi messaggi è conforme al protocollo EventSource
.
event: event name data: JSON encoded data payload
Il server può inviare i seguenti eventi:
Mettere
I dati con codifica JSON sono un oggetto con due chiavi: path e data . La chiave del percorso punta a una posizione relativa all'URL della richiesta. Il client dovrebbe sostituire tutti i dati in quella posizione nella sua cache con data .
toppa
I dati con codifica JSON sono un oggetto con due chiavi: path e data . La chiave del percorso punta a una posizione relativa all'URL della richiesta. Per ogni chiave in data , il client deve sostituire la chiave corrispondente nella sua cache con i dati per quella chiave nel messaggio.
mantenersi in vita
I dati per questo evento sono null
. Non è richiesta alcuna azione.
Annulla
Alcuni errori imprevisti possono inviare un evento "cancel" e interrompere la connessione. La causa è descritta nei dati forniti per questo evento. Alcune potenziali cause sono le seguenti: 1. Le regole di sicurezza del database Firebase Realtime non consentono più una lettura nella posizione richiesta. La descrizione dei dati per questa causa è "Autorizzazione negata". 2. Una scrittura ha attivato uno streamer di eventi che ha inviato un albero JSON di grandi dimensioni che supera il nostro limite, 512 MB. I "dati" per questa causa sono "Il carico utile specificato è troppo grande, richiedi una posizione con meno dati".
autenticazione_revocata
I dati per questo evento sono una stringa che indica che la credenziale è scaduta. Questo evento viene inviato quando il parametro auth
fornito non è più valido.
Ecco un esempio di serie di eventi che il server può inviare:
// 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}}
Priorità
È possibile fare riferimento alle informazioni sulla priorità per una posizione con un "figlio virtuale" denominato .priority
. Puoi leggere le priorità con le richieste GET
e scriverle con le richieste PUT
. Ad esempio, la seguente richiesta recupera la priorità del nodo users/tom
:
curl 'https://[PROJECT_ID].firebaseio/users/tom/.priority.json'
Per scrivere priorità e dati contemporaneamente, puoi aggiungere un figlio .priority
al payload JSON:
curl -X PUT -d '{"name": {"first": "Tom"}, ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom.json'
Per scrivere priorità e un valore primitivo (ad esempio una stringa) allo stesso tempo, puoi aggiungere un figlio .priority
e inserire il valore primitivo in un figlio .value
:
curl -X PUT -d '{".value": "Tom", ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom/name/first.json'
Questo scrive "Tom"
con una priorità di 1.0
. Le priorità possono essere incluse a qualsiasi profondità nel payload JSON.
Valori del server
È possibile scrivere valori del server in una posizione utilizzando un valore segnaposto che è un oggetto con una singola chiave .sv
. Il valore per quella chiave è il tipo di valore del server che desideri impostare. Ad esempio, la richiesta seguente imposta il valore del nodo sul timestamp corrente del server Firebase:
curl -X PUT -d '{".sv": "timestamp"}' \ 'https://[PROJECT_ID].firebaseio/users/tom/startedAtTime.json'
Puoi anche scrivere le priorità utilizzando i valori del server, utilizzando il percorso "figlio virtuale" indicato sopra.
I valori del server supportati includono:
Valore del server | |
---|---|
timestamp | Il tempo trascorso dall'epoca di UNIX, in millisecondi. |
incremento | Fornire un valore delta intero o in virgola mobile, nel formato { ".sv": {"increment": <delta_value> }} , con cui incrementare atomicamente il valore del database corrente. Se i dati non esistono ancora, l'aggiornamento imposterà i dati sul valore delta. Se il valore delta o i dati esistenti sono numeri a virgola mobile, entrambi i valori verranno interpretati come numeri a virgola mobile e applicati sul back-end come un valore doppio. L'aritmetica doppia e la rappresentazione dei valori doppi seguono la semantica IEEE 754. Se si verifica un overflow di numeri interi positivi/negativi, la somma viene calcolata come doppia. |
Recupero e aggiornamento delle regole di sicurezza del database Firebase Realtime
L'API REST può essere utilizzata anche per recuperare e aggiornare le regole di sicurezza del database Firebase Realtime per il tuo progetto Firebase. Avrai bisogno del segreto del tuo progetto Firebase, che puoi trovare nel pannello Account di servizio delle impostazioni del tuo progetto 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'
Autenticare le richieste
Per impostazione predefinita, le richieste REST vengono eseguite senza autenticazione e avranno esito positivo solo se le regole del database in tempo reale consentono l'accesso pubblico in lettura o scrittura ai dati. Per autenticare la tua richiesta, utilizza i parametri di query access_token=
o auth=
.
Scopri di più sull'autenticazione tramite l'API REST in Autenticare le richieste REST .
Condizioni di errore
L'API REST del database Firebase può restituire i seguenti codici di errore.
Codici di stato HTTP | |
---|---|
400 Richiesta errata | Una delle seguenti condizioni di errore:
|
401 Non autorizzato | Una delle seguenti condizioni di errore:
|
404 non trovato | Il Realtime Database specificato non è stato trovato. |
500 Errore interno del server | Il server ha restituito un errore. Per ulteriori dettagli vedere il messaggio di errore. |
503 servizio non disponibile | Il Firebase Realtime Database specificato è temporaneamente non disponibile, il che significa che la richiesta non è stata tentata. |
412 Precondizione non riuscita | Il valore ETag specificato della richiesta nell'intestazione if-match non corrispondeva al valore del server. |
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-03-20 UTC.