Catch up on everthing we announced at this year's Firebase Summit. Learn more

Abrufen von Daten

Daten lesen mit GET

Wir können Daten aus unserer Datenbank Firebase lesen , indem eine Ausgabe von GET Anforderung an seinen URL - Endpunkt. Lassen Sie uns mit unserem Blog-Beispiel aus dem vorherigen Abschnitt fortfahren und alle unsere Blog-Post-Daten lesen:

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'

Eine erfolgreiche Anforderung wird von einem angezeigt werden 200 OK HTTP - Statuscode, und die Antwort wird die Daten , die wir sind retrieving enthalten.

URI-Parameter hinzufügen

Die REST-API akzeptiert beim Lesen von Daten aus unserer Firebase-Datenbank mehrere Abfrageparameter. Nachfolgend sind die am häufigsten verwendeten Parameter aufgeführt. Eine vollständige Liste finden Sie in der REST - API - Referenz .

auth

Die auth - Request - Parameter ermöglichen den Zugriff auf Daten , die von geschützter Firebase Realtime Datenbank - Regeln , und wird von allen Anforderungstypen unterstützt. Das Argument kann entweder Ihre Firebase App Geheimnis oder ein Authentifizierungstoken, wie in dem beschriebenen Benutzer in Firebase Projekten . Im folgende Beispiel senden wir eine GET - Anforderung mit einem auth Parameter, wo CREDENTIAL entweder ist Ihre Firebase App Geheimnis oder eine Authentifizierungs - Token:

curl 'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'

drucken

Festlegen von print=pretty gibt die Daten in einem lesbaren Format.

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'

Festlegen von print=silent kehrt ein 204 No Content auf Erfolg.

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=silent'

zurückrufen

Um REST Anrufe von einem Web - Browser über mehrere Domains machen können Sie verwenden JSONP die Antwort in einem JavaScript - Callback - Funktion zu wickeln. In callback= die REST - API haben die zurückgegebenen Daten in der Callback - Funktion wickeln Sie angeben. Zum Beispiel:

<script>
  function gotData(data) {
    console.log(data);
  }
</script>
<script src="https://docs-examples.firebaseio.com/fireblog/posts.json?callback=gotData">

seicht

Dies ist eine erweiterte Funktion, mit der Sie mit großen Datensätzen arbeiten können, ohne alles herunterladen zu müssen. Um es zu nutzen, fügt shallow=true als Parameter. Dadurch wird die Tiefe der zurückgegebenen Daten begrenzt. Wenn es sich bei den Daten am Standort um ein JSON-Primitives (String, Number oder Boolean) handelt, wird dessen Wert einfach zurückgegeben. Wenn die Datenmomentaufnahme an der Stelle ein JSON Objekt ist, werden die Werte für jede Taste auf true abgeschnitten. Verwenden Sie beispielsweise die 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!"

Versuchen Sie es mit dieser heraus curl Anfrage:

curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?shallow=true&print=pretty'

Auszeit

Verwenden Sie dies, um zu begrenzen, wie lange das Lesen auf der Serverseite dauert. Wenn eine Leseanforderung nicht innerhalb der vorgegebenen 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 riesigen Teilbaum abzurufen. Die tatsächliche Lesezeit kann je nach Datengröße und Caching variieren.

Geben Sie timeouts mit dem folgenden Format: 3ms , 3s oder 3min , mit einer Nummer und einer Einheit. Wenn nicht anders angegeben, die maximale timeout von 15min angewandt werden. Wenn das timeout nicht positiv ist, oder den maximalen Wert überschreitet, wird die Anfrage mit einem HTTP - 400 - Fehler abgelehnt. In dem folgenden Beispiel wird die GET enthält Anforderung eine timeout von 10 Sekunden.

curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?timeout=10s'

Daten filtern

Wir können Abfragen erstellen, um Daten basierend auf verschiedenen Faktoren zu filtern. Um zu starten, geben Sie an, wie Sie Ihre Daten wollen die zu filternde mit orderBy Parameter. Dann kombinieren Sie orderBy mit einem der anderen fünf Parameter: limitToFirst , limitToLast , startAt , endAt und equalTo .

Da wir alle bei Firebase der Meinung sind, dass Dinosaurier ziemlich cool sind, verwenden wir einen Ausschnitt aus einer Beispieldatenbank mit Dinosaurier-Fakten, 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
  }
}

Wir können Daten in einem von drei Arten filtern: mit einem Kind Schlüssel durch Schlüssel oder durch Wert. Eine Abfrage beginnt mit einer dieser Parameter, und dann mit einem oder mehreren der folgenden Parameter kombiniert werden müssen: startAt , endAt , limitToFirst , limitToLast oder equalTo .

Filtern nach einem angegebenen untergeordneten Schlüssel

Wir können durch ein gemeinsames Kind Schlüssel Knoten filtern , indem Sie den Schlüssel zum Passieren orderBy Parameter. Um beispielsweise alle Dinosaurier mit einer Höhe von mehr als 3 abzurufen, können wir Folgendes tun:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'

Jeder Knoten, das Kind nicht Schlüssel verfügen wir Filterung auf mit einem Wert von sortiert werden null . Einzelheiten darüber , wie Daten bestellt, siehe Wie Daten bestellt ist .

Firebase unterstützt auch Abfragen, die nach tief verschachtelten untergeordneten Elementen geordnet sind, anstatt nur nach untergeordneten Elementen einer Ebene darunter. Dies ist nützlich, wenn Sie über tief verschachtelte Daten wie diese verfügen:

{
  "lambeosaurus": {
    "dimensions": {
      "height" : 2.1,
      "length" : 12.5,
      "weight": 5000
    }
  },
  "stegosaurus": {
    "dimensions": {
      "height" : 4,
      "length" : 9,
      "weight" : 2500
    }
  }
}

Um jetzt die Höhe abzufragen, verwenden wir 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 gefiltert werden. Mit Hilfe der orderBy Parameter mehrmals auf der gleichen Anfrage wirft einen Fehler.

Nach Schlüssel filtern

Wir können auch Filterknoten , die durch ihre Schlüssel mit der orderBy="$key" Parameter. Das folgende Beispiel ruft alle Dinosaurier mit einem Namen beginnt mit dem Buchstaben a bis m :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="a"&endAt="m"&print=pretty'

Nach Wert filtern

Wir können Knoten filtern , indem Sie den Wert ihrer untergeordneten Schlüssel mit dem orderBy="$value" Parameter. Nehmen wir an, die Dinosaurier haben einen Dino-Sportwettbewerb und wir verfolgen ihre Ergebnisse im folgenden Format:

{
  "scores": {
    "bruhathkayosaurus": 55,
    "lambeosaurus": 21,
    "linhenykus": 80,
    "pterodactyl": 93,
    "stegosaurus": 5,
    "triceratops": 22
  }
}

Um alle Dinosaurier mit einer Punktzahl über 50 abzurufen, könnten wir die folgende Anfrage stellen:

curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&startAt=50&print=pretty'

Siehe Wie Daten bestellt wird für eine Erklärung, wie null , boolean, String und Objektwerten sortiert werden bei der Verwendung von orderBy="$value" .

Komplexe Filterung

Wir können mehrere Parameter kombinieren, um komplexere Abfragen zu erstellen.

Abfragen begrenzen

Die limitToFirst und limitToLast Parameter werden verwendet , um eine maximale Anzahl von Kindern zu setzen , für die Daten zu empfangen. Wenn wir ein Limit von 100 festlegen, erhalten wir nur bis zu 100 passende Kinder. Wenn wir weniger als 100 Nachrichten in unserer Datenbank gespeichert haben, erhalten wir jedes Kind. Wenn wir jedoch über 100 Nachrichten haben, erhalten wir nur Daten für 100 dieser Nachrichten. Diese werden die ersten 100 bestellten Nachrichten, wenn wir verwenden limitToFirst oder die letzten 100 bestellten Nachrichten , wenn wir verwenden limitToLast .

Mit unserem Dinosaurier Fakten Datenbank und orderBy , können wir die beiden schwersten Dinosaurier finden:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="weight"&limitToLast=2&print=pretty'

In ähnlicher Weise können wir die beiden kürzesten Dinosaurier unter Verwendung finden limitToFirst :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&limitToFirst=2&print=pretty'

Wir können auch Limit - Abfragen mit dirigieren orderBy="$value" . Wenn wir eine Rangliste mit den drei bestbewerteten Dino-Sport-Konkurrenten erstellen möchten, könnten wir Folgendes tun:

curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&limitToLast=3&print=pretty'

Bereichsabfragen

Mit startAt , endAt und equalTo ermöglicht es uns , beliebige Start- und Endpunkte für unsere Anfragen zu wählen. Zum Beispiel, wenn wir alle Dinosaurier, die mindestens drei Meter hoch, können wir finden wollten kombinieren orderBy und startAt :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'

Wir können verwenden endAt alle Dinosaurier , deren Namen kommen vor Pterodactyl zu finden lexikografisch:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&endAt="pterodactyl"&print=pretty'

Wir können kombinieren startAt und endAt beide Enden unserer Abfrage zu begrenzen. Das folgende Beispiel findet alle Dinosaurier, 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.

Alles zusammenfügen

Wir können all diese Techniken kombinieren, um komplexe Abfragen zu erstellen. Vielleicht möchten Sie zum Beispiel die Namen aller Dinosaurier finden, die kleiner oder gleich unserer Lieblingsart 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"

Wie Daten bestellt werden

In diesem Abschnitt wird erläutert, wie Ihre Daten geordnet werden, wenn Sie jeden der drei Filterparameter verwenden.

Sortieren nach

Bei der Verwendung von orderBy mit dem Namen eines Kind Schlüssel, Daten , die die angegebenen untergeordneten Schlüssel wie folgt bestellt werden enthalten:

  1. Kinder mit einem null - Wert für den angegebenen Schlüssel Kind an erster Stelle .
  2. Kinder mit einem Wert von false für den angegebenen Kind Schlüssel als nächstes kommen. Wenn mehrere Kinder einen Wert von false , werden sie sortiert lexikographisch durch Schlüssel.
  3. Kinder mit einem Wert von true für den angegebenen Kind Schlüssel als nächstes kommen. Wenn mehrere Kinder einen Wert von true , sie sind lexikographisch nach Schlüssel sortiert.
  4. Als nächstes folgen Kinder mit einem numerischen Wert, sortiert in aufsteigender Reihenfolge. Wenn mehrere untergeordnete Knoten denselben numerischen Wert für den angegebenen untergeordneten Knoten haben, werden sie nach dem Schlüssel sortiert.
  5. Strings kommen nach Zahlen und werden lexikographisch in aufsteigender Reihenfolge sortiert. Wenn mehrere Kinder denselben Wert für den angegebenen Kindknoten haben, werden sie lexikografisch nach Schlüssel sortiert.
  6. Die Objekte stehen an letzter Stelle und sind lexikographisch nach Schlüssel in aufsteigender Reihenfolge sortiert.
Die gefilterten Ergebnisse werden ungeordnet zurückgegeben. Wenn die Reihenfolge Ihrer Daten wichtig ist, sollten Sie die Ergebnisse in Ihrer Anwendung sortieren, nachdem sie von Firebase zurückgegeben wurden.

orderBy="$key"

Bei Verwendung der orderBy="$key" Parameter Ihre Daten zu sortieren, werden die Daten in von Schlüsseln aufsteigend sortierte zurückgegeben werden , wie folgt. Beachten Sie, dass Schlüssel nur Zeichenfolgen sein können.

  1. Kinder mit einem Schlüssel, der als 32-Bit-Ganzzahl geparst werden kann, kommen zuerst, sortiert in aufsteigender Reihenfolge.
  2. Als nächstes kommen Kinder mit einem String-Wert als Schlüssel, lexikographisch aufsteigend sortiert.

orderBy="$Wert"

Bei Verwendung der orderBy="$value" Parameter Ihre Daten zu sortieren, werden die Kinder von ihrem Wert bestellt werden. Das Sortierkriterium entspricht den Daten, die nach einem untergeordneten Schlüssel geordnet sind, außer dass der Wert des Knotens anstelle des Werts eines angegebenen untergeordneten Schlüssels verwendet wird.

orderBy="$Priorität"

Bei Verwendung der orderBy="$priority" Parameter Ihre Daten zu sortieren, wird die Reihenfolge der Kinder , die von ihrer Priorität und Schlüsseln wie folgt bestimmt. Beachten Sie, dass Prioritätswerte nur Zahlen oder Zeichenfolgen sein können.

  1. Kinder ohne Priorität (Standard) kommen zuerst.
  2. Als nächstes kommen Kinder mit einer Nummer als Priorität. Sie sind numerisch nach Priorität sortiert, von klein bis groß.
  3. Kinder mit einer Schnur als Priorität kommen an letzter Stelle. Sie sind lexikographisch nach Priorität sortiert.
  4. Immer wenn zwei Kinder die gleiche Priorität haben (auch keine Priorität), werden sie nach dem Schlüssel sortiert. Numerische Schlüssel kommen zuerst (numerisch sortiert), gefolgt von den restlichen Schlüsseln (lexikographisch sortiert).

Weitere Informationen zu den Prioritäten finden Sie in der API - Referenz .

Streamen von der REST-API

Firebase REST - Endpunkte unterstützen die Eventsource / Server-Sent Events Protokoll, es einfach zu Strom Änderungen an einem einzigen Standort in unserer Datenbank Firebase zu machen.

Um mit dem Streaming zu beginnen, müssen wir Folgendes tun:

  1. Set der Client - Accept - Header , um text/event-stream
  2. Respektieren Sie HTTP-Weiterleitungen, insbesondere HTTP-Statuscode 307
  3. Fügen Sie den auth - Abfrageparameter , wenn die Firebase Datenbank Standort Erlaubnis erfordert zu lesen

Im Gegenzug sendet der Server benannte Ereignisse, wenn sich der Zustand der Daten an der angeforderten URL ändert. Der Aufbau dieser Nachrichten entspricht dem EventSource-Protokoll:

event: event name
data: JSON encoded data payload

Der Server kann die folgenden Ereignisse senden:

stellen Die JSON-codierten Daten sind ein Objekt mit zwei Schlüsseln: Pfad und Daten
Der Pfad verweist auf einen Ort relativ zur Anforderungs-URL
Der Client sollte alle Daten an diesem Ort in seinem Cache durch die in der Nachricht angegebenen Daten ersetzen
Patch Die JSON-codierten Daten sind ein Objekt mit zwei Schlüsseln: Pfad und Daten
Der Pfad verweist auf einen Ort relativ zur Anforderungs-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
bleib am Leben 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-Echtzeitdatenbankregeln dazu führen, dass ein Lesen am angeforderten Speicherort nicht mehr zulässig ist
auth_revoked Die Daten für dieses Ereignis sind eine Zeichenfolge, die angibt, dass die Anmeldeinformationen abgelaufen sind
Dieses Ereignis wird gesendet, wenn der angegebene Auth-Parameter nicht mehr gültig ist

Unten ist 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, überprüft Firego , einen Drittanbieter - Wrapper um die Firebase REST und Streaming - APIs.