Daten mit GET lesen
Sie können Daten aus Ihrer Firebase-Datenbank lesen, indem Sie eine GET Anfrage an den URL
Endpunkt senden. Fahren wir mit unserem Blogbeispiel aus dem vorherigen Abschnitt fort und lesen wir alle unsere
Blogpostdaten:
curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'
Eine erfolgreiche Anfrage wird durch den 200 OK HTTP-Statuscode angezeigt. Die
Antwort enthält die Daten, die wir abrufen.
URI-Parameter hinzufügen
Die REST API akzeptiert mehrere Abfrageparameter, wenn Daten aus Ihrer Firebase-Datenbank gelesen werden. Im Folgenden sind die am häufigsten verwendeten Parameter aufgeführt. Eine vollständige Liste finden Sie in der REST API-Referenz.
auth
Der Anfrageparameter auth ermöglicht den Zugriff auf Daten, die durch
Firebase Realtime Database Security Rules geschützt sind, und wird
von allen Anfragetypen unterstützt. Das Argument kann entweder das Secret Ihrer Firebase-App oder ein
Authentifizierungstoken sein, wie unter Nutzer in Firebase-Projekten beschrieben. Im folgenden Beispiel senden wir eine GET Anfrage mit einem auth
Parameter, wobei CREDENTIAL entweder das Secret Ihrer Firebase-App oder ein
Authentifizierungstoken ist:
curl 'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'
ausgeben
Wenn Sie print=pretty angeben, werden die Daten in einem für Menschen lesbaren Format zurückgegeben.
curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'
Wenn Sie print=silent angeben, wird bei Erfolg 204 No Content zurückgegeben.
curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=silent'
callback
Wenn Sie REST-Aufrufe von einem Webbrowser über verschiedene Domains hinweg ausführen möchten, können Sie
JSONP verwenden, um die Antwort in eine JavaScript
Callback-Funktion einzuschließen. Fügen Sie callback= hinzu, damit die REST API die zurückgegebenen Daten in die
von Ihnen angegebene Callback-Funktion einschließt. Beispiel:
<script>
function gotData(data) {
console.log(data);
}
</script>
<script src="https://docs-examples.firebaseio.com/fireblog/posts.json?callback=gotData">shallow
Dies ist eine erweiterte Funktion, mit der Sie große Datensätze verarbeiten können, ohne alles herunterladen zu müssen. Fügen Sie dazu shallow=true als Parameter hinzu. Dadurch wird die Tiefe der zurückgegebenen Daten begrenzt. Wenn die Daten am Speicherort ein JSON-Primitive (String, Zahl,
oder boolescher Wert) sind, wird einfach der Wert zurückgegeben. Wenn der Daten-Snapshot am Speicherort ein JSON
Objekt ist, werden die Werte für jeden Schlüssel auf true gekürzt. Beispiel mit
den folgenden Daten:
{ "message": { "user": { "name": "Chris" }, "body": "Hello!" } } // A request to /message.json?shallow=true // would return the following: { "user": true, "body": true } // A request to /message/body.json?shallow=true // would simply return: "Hello!"
Probieren Sie es mit dieser curl-Anfrage aus:
curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?shallow=true&print=pretty'
Zeitüberschreitung
Mit diesem Parameter können Sie die Lesedauer auf dem Server begrenzen. Wenn eine Lese anfrage nicht innerhalb der zugewiesenen Zeit abgeschlossen wird, wird sie mit einem HTTP 400-Fehler beendet. Dies ist besonders nützlich, wenn Sie eine kleine Datenübertragung erwarten und nicht zu lange warten möchten, um einen potenziell großen Unterbaum abzurufen. Die tatsächliche Lesezeit kann je nach Datengröße und Caching variieren.
Geben Sie timeouts im folgenden Format an: 3ms,
3s oder 3min, mit einer Zahl und einer Einheit. Wenn nichts
angegeben ist, wird das maximale timeout von 15min angewendet. Wenn das timeout nicht positiv ist oder das Maximum überschreitet,
wird die Anfrage mit einem HTTP-400-Fehler abgelehnt.
Im folgenden Beispiel enthält die GET Anfrage ein
timeout von 10 Sekunden.
curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?timeout=10s'
Daten filtern
Sie können Abfragen erstellen, um Daten anhand verschiedener Faktoren zu filtern. Geben Sie zuerst mit dem orderBy
Parameter an, wie Ihre Daten gefiltert werden sollen. Kombinieren Sie dann orderBy mit einem der anderen fünf Parameter:
limitToFirst, limitToLast, startAt, endAt,
und equalTo.
Da wir alle bei Firebase Dinosaurier ziemlich cool finden, verwenden wir einen Ausschnitt aus einer Beispieldatenbank mit Dinosaurierfakten, um zu zeigen, wie Sie Daten filtern können:
{
"lambeosaurus": {
"height": 2.1,
"length": 12.5,
"weight": 5000
},
"stegosaurus": {
"height": 4,
"length": 9,
"weight": 2500
}
}
Sie können Daten auf drei Arten filtern: nach untergeordnetem Schlüssel, nach Schlüssel oder nach
Wert. Eine Abfrage beginnt mit einem dieser Parameter und muss dann mit einem oder mehreren der folgenden Parameter kombiniert werden: startAt, endAt, limitToFirst, limitToLast oder equalTo.
Nach einem angegebenen untergeordneten Schlüssel filtern
Sie können Knoten nach einem gemeinsamen untergeordneten Schlüssel filtern, indem Sie diesen Schlüssel an den orderBy
Parameter übergeben. Wenn Sie beispielsweise alle Dinosaurier mit einer Höhe von mehr als 3 abrufen möchten, können Sie Folgendes tun:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'
Alle Knoten, die nicht den untergeordneten Schlüssel haben, nach dem wir filtern, werden mit dem Wert
null sortiert. Weitere Informationen zur Sortierung von Daten finden Sie unter So werden Daten sortiert.
Firebase unterstützt auch Abfragen, die nach tief verschachtelten untergeordneten Elementen sortiert sind, nicht nur nach untergeordneten Elementen einer Ebene. Das ist nützlich, wenn Sie tief verschachtelte Daten wie diese haben:
{
"lambeosaurus": {
"dimensions": {
"height" : 2.1,
"length" : 12.5,
"weight": 5000
}
},
"stegosaurus": {
"dimensions": {
"height" : 4,
"length" : 9,
"weight" : 2500
}
}
}Wenn Sie jetzt die Höhe abfragen möchten, verwenden Sie den vollständigen Pfad zum Objekt anstelle eines einzelnen Schlüssels:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="dimensions/height"&startAt=3&print=pretty'
Abfragen können jeweils nur nach einem Schlüssel filtern. Wenn Sie den Parameter orderBy mehrmals in derselben Anfrage verwenden, wird ein Fehler ausgelöst.
Nach Schlüssel filtern
Sie können Knoten auch nach ihren Schlüsseln filtern, indem Sie den Parameter orderBy="$key" verwenden. Im
folgenden Beispiel werden alle Dinosaurier mit einem Namen abgerufen, der mit einem Buchstaben von a bis m beginnt:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="a"&endAt="m"&print=pretty'
Nach Wert filtern
Sie können Knoten nach dem Wert ihrer untergeordneten Schlüssel filtern, indem Sie den orderBy="$value"
Parameter verwenden. Angenommen, die Dinosaurier veranstalten einen Dinosaurier-Sportwettbewerb und wir erfassen
ihre Ergebnisse im folgenden Format:
{
"scores": {
"bruhathkayosaurus": 55,
"lambeosaurus": 21,
"linhenykus": 80,
"pterodactyl": 93,
"stegosaurus": 5,
"triceratops": 22
}
}Wenn Sie alle Dinosaurier mit einer Punktzahl über 50 abrufen möchten, können Sie die folgende Anfrage stellen:
curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&startAt=50&print=pretty'
Unter So werden Daten sortiert wird erklärt, wie null, boolesche Werte, Stringwerte und Objektwerte sortiert werden, wenn Sie orderBy="$value" verwenden.
Komplexes Filtern
Sie können mehrere Parameter kombinieren, um komplexere Abfragen zu erstellen.
Abfragen begrenzen
Mit den Parametern limitToFirst und limitToLast wird die
maximale Anzahl untergeordneter Elemente festgelegt, für die Daten empfangen werden sollen. Wenn wir ein Limit von 100 festlegen, erhalten wir nur
bis zu 100 übereinstimmende untergeordnete Elemente. Wenn in unserer Datenbank weniger als 100 Nachrichten gespeichert sind, erhalten wir alle untergeordneten Elemente. Wenn wir jedoch mehr als 100 Nachrichten haben, erhalten wir nur
Daten für 100 dieser Nachrichten. Das sind die ersten 100 sortierten Nachrichten, wenn wir
limitToFirst verwenden, oder die letzten 100 sortierten Nachrichten, wenn wir
limitToLast verwenden.
Mit unserer Datenbank mit Dinosaurierfakten und orderBy können wir die beiden
schwersten Dinosaurier finden:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="weight"&limitToLast=2&print=pretty'
Ebenso können wir die beiden kleinsten Dinosaurier mit limitToFirst finden:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&limitToFirst=2&print=pretty'
Sie können auch Abfragen mit orderBy="$value" begrenzen. Wenn wir eine
Bestenliste mit den drei besten Dinosaurier-Sportlern erstellen möchten, können wir Folgendes tun:
curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&limitToLast=3&print=pretty'
Bereichsabfragen
Mit startAt, endAt und equalTo können wir
beliebige Start- und Endpunkte für unsere Abfragen auswählen. Wenn wir beispielsweise alle
Dinosaurier finden möchten, die mindestens drei Meter groß sind, können wir orderBy und
startAt kombinieren:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'
Mit endAt können wir alle Dinosaurier finden, deren Namen lexikografisch vor Pterodactyl
stehen:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&endAt="pterodactyl"&print=pretty'
Wir können startAt und endAt kombinieren, um beide Enden unserer Abfrage zu begrenzen.
Im folgenden Beispiel werden alle Dinosaurier gefunden, deren Name mit dem Buchstaben „b“ beginnt:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="b"&endAt="b\uf8ff"&print=pretty'
Bereichsabfragen sind auch nützlich, wenn Sie Ihre Daten paginieren müssen.
Zusammenfassung
Wir können alle diese Techniken kombinieren, um komplexe Abfragen zu erstellen. Vielleicht möchten Sie beispielsweise den Namen aller Dinosaurier finden, die kleiner oder gleich groß wie unser Lieblingsdinosaurier, der Stegosaurus, sind:
MY_FAV_DINO_HEIGHT=`curl "https://dinosaur-facts.firebaseio.com/dinosaurs/stegosaurus/height.json"`
curl "https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy=\"height\"&endAt=${MY_FAV_DINO_HEIGHT}&print=pretty"
So werden Daten sortiert
In diesem Abschnitt wird erläutert, wie Ihre Daten sortiert werden, wenn Sie die drei Filterparameter verwenden.
orderBy
Wenn Sie orderBy mit dem Namen eines untergeordneten Schlüssels verwenden, werden Daten, die den angegebenen
untergeordneten Schlüssel enthalten, wie folgt sortiert:
-
Untergeordnete Elemente mit einem
null-Wert für den angegebenen untergeordneten Schlüssel werden zuerst angezeigt. -
Als Nächstes folgen untergeordnete Elemente mit dem Wert
falsefür den angegebenen untergeordneten Schlüssel. Wenn mehrere untergeordnete Elemente den Wertfalsehaben, werden sie lexikografisch nach Schlüssel sortiert. -
Als Nächstes folgen untergeordnete Elemente mit dem Wert
truefür den angegebenen untergeordneten Schlüssel. Wenn mehrere untergeordnete Elemente den Werttruehaben, werden sie lexikografisch nach Schlüssel sortiert. - Als Nächstes folgen untergeordnete Elemente mit einem numerischen Wert, sortiert in aufsteigender Reihenfolge. Wenn mehrere untergeordnete Elemente denselben numerischen Wert für den angegebenen untergeordneten Knoten haben, werden sie nach Schlüssel sortiert.
- Strings folgen nach Zahlen und werden lexikografisch in aufsteigender Reihenfolge sortiert. Wenn mehrere untergeordnete Elemente denselben Wert für den angegebenen untergeordneten Knoten haben, werden sie lexikografisch nach Schlüssel sortiert.
- Objekte folgen zuletzt und werden lexikografisch nach Schlüssel in aufsteigender Reihenfolge sortiert.
orderBy="$key"
Wenn Sie den orderBy="$key" Parameter verwenden, um Ihre Daten zu sortieren, werden die Daten
in aufsteigender Reihenfolge nach Schlüssel zurückgegeben. Beachten Sie, dass Schlüssel nur Strings sein können.
- Untergeordnete Elemente mit einem Schlüssel, der als 32-Bit-Ganzzahl geparst werden kann, werden zuerst angezeigt, sortiert in aufsteigender Reihenfolge.
- Als Nächstes folgen untergeordnete Elemente mit einem Stringwert als Schlüssel, sortiert lexikografisch in aufsteigender Reihenfolge.
orderBy="$value"
Wenn Sie den orderBy="$value" Parameter verwenden, um Ihre Daten zu sortieren, werden untergeordnete Elemente nach ihrem Wert sortiert. Die Sortierkriterien sind dieselben wie bei Daten, die nach einem untergeordneten Schlüssel sortiert sind,
Anstelle des Werts eines angegebenen untergeordneten Schlüssels wird jedoch der Wert des Knotens verwendet.
orderBy="$priority"
Wenn Sie den orderBy="$priority" Parameter verwenden, um Ihre Daten zu sortieren, wird die Reihenfolge der
untergeordneten Elemente durch ihre Priorität und ihren Schlüssel bestimmt. Beachten Sie, dass Prioritätswerte
nur Zahlen oder Strings sein können.
- Untergeordnete Elemente ohne Priorität (Standard) werden zuerst angezeigt.
- Als Nächstes folgen untergeordnete Elemente mit einer Zahl als Priorität. Sie werden numerisch nach Priorität sortiert, von klein nach groß.
- Untergeordnete Elemente mit einem String als Priorität werden zuletzt angezeigt. Sie werden lexikografisch nach Priorität sortiert.
- Wenn zwei untergeordnete Elemente dieselbe Priorität haben (einschließlich keiner Priorität), werden sie nach Schlüssel sortiert. Numerische Schlüssel werden zuerst angezeigt (numerisch sortiert), gefolgt von den übrigen Schlüsseln (sortiert lexikografisch).
Weitere Informationen zu Prioritäten finden Sie in der API-Referenz.
Streaming aus der REST API
Firebase-REST-Endpunkte unterstützen das EventSource / Server-Sent Events-Protokoll, sodass Änderungen an einem einzelnen Speicherort in Ihrer Firebase-Datenbank ganz einfach gestreamt werden können.
So beginnen Sie mit dem Streaming:
-
Setzen Sie den Accept-Header des Clients auf
text/event-stream. - Beachten Sie HTTP-Weiterleitungen, insbesondere den HTTP-Statuscode 307.
-
Fügen Sie den
authSuchparameter hinzu, wenn für den Firebase-Datenbankspeicherort eine Leseberechtigung erforderlich ist.
Im Gegenzug sendet der Server benannte Ereignisse, wenn sich der Status der Daten unter der angeforderten URL ändert. Die Struktur dieser Nachrichten entspricht dem EventSource-Protokoll:
event: event name data: JSON encoded data payload
Der Server kann die folgenden Ereignisse senden:
| put | Die JSON-codierten Daten sind ein Objekt mit zwei Schlüsseln: „path“ und „data“ Der Pfad verweist auf einen Speicherort relativ zur Anfrage-URL Der Client sollte alle Daten an diesem Speicherort in seinem Cache durch die in der Nachricht angegebenen Daten ersetzen |
| patch | Die JSON-codierten Daten sind ein Objekt mit zwei Schlüsseln: „path“ und „data“ Der Pfad verweist auf einen Speicherort relativ zur Anfrage-URL Für jeden Schlüssel in den Daten sollte der Client den entsprechenden Schlüssel in seinem Cache durch die Daten für diesen Schlüssel in der Nachricht ersetzen |
| Keep-Alive | Die Daten für dieses Ereignis sind null. Es ist keine Aktion erforderlich. |
| Abbrechen | Die Daten für dieses Ereignis sind null Dieses Ereignis wird gesendet, wenn die Firebase Realtime Database Security Rules dazu führen, dass das Lesen am angeforderten Speicherort nicht mehr zulässig ist. |
| auth_revoked | Die Daten für dieses Ereignis sind ein String, der angibt, dass die Anmeldedaten abgelaufen sind. Dieses Ereignis wird gesendet, wenn der angegebene Parameter „auth“ nicht mehr gültig ist. |
Im Folgenden sehen Sie ein Beispiel für eine Reihe von Ereignissen, die der Server senden kann:
// 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}}
Wenn Sie Go verwenden, sehen Sie sich Firego an, einen Wrapper eines Drittanbieters für die Firebase REST API und die Streaming API.