Pobieram dane

Odczytywanie danych za pomocą metody GET

Możemy odczytywać dane z naszej bazy danych Firebase, wysyłając na jej adres URL żądanie GET. punktu końcowego. Kontynuujmy nasz przykładowy blog z poprzedniej sekcji i przeczytajmy wszystkie dane postów na blogu:

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

Udane żądanie jest sygnalizowane kodem stanu HTTP 200 OK, a parametr będzie zawierać pobierane dane.

Dodawanie parametrów identyfikatora URI

Podczas odczytywania danych z naszej bazy danych Firebase interfejs API REST akceptuje kilka parametrów zapytania. Poniżej znajdziesz listę najczęściej używanych parametrów. Pełną listę znajdziesz tutaj Dokumentacja interfejsu API REST.

uwierzytelnienie

Parametr żądania auth umożliwia dostęp do danych chronionych przez reguł zabezpieczeń Bazy danych czasu rzeczywistego Firebase. obsługiwane przez wszystkie typy żądań. Argumentem może być tajny klucz aplikacji Firebase lub token uwierzytelniania zgodnie z opisem w artykule Użytkownicy w projektach Firebase. W poniższym przykładzie wysyłamy żądanie GET z elementem auth gdzie CREDENTIAL to tajny klucz aplikacji Firebase lub token uwierzytelniania:

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

wyświetlić

Jeśli określisz wartość print=pretty, dane będą wyświetlane w formacie zrozumiałym dla człowieka.

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

Jeśli określisz wartość print=silent, po pomyślnym zwróceniu wyników zobaczysz wartość 204 No Content.

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

wywołanie zwrotne

Aby wykonywać wywołania REST w przeglądarce między domenami, możesz użyć JSONP, aby zapakować odpowiedź w kodzie JavaScript. funkcji wywołania zwrotnego. Dodaj callback=, aby interfejs API REST opakował zwrócone dane w funkcji wywołania zwrotnego. Przykład:

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

płytka

To zaawansowana funkcja zaprojektowana do pracy z dużymi zbiorami danych pobierz wszystko. Aby go użyć, dodaj shallow=true jako parametr. Ograniczy to głębokości zwracanych danych. Jeśli dane w lokalizacji są obiektem podstawowym JSON (ciąg, liczba, lub boolean), jego wartość zostanie po prostu zwrócona. Jeśli zrzut danych w lokalizacji jest w formacie JSON , wartości każdego klucza zostaną obcięte do true. Na przykład użycie poniższe dane:

{
  "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!"

Wypróbuj w ramach tej prośby curl:

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

czas oczekiwania

Służy do ograniczania czasu odczytu po stronie serwera. Jeśli odczyt nie kończy się w wyznaczonym czasie i kończy się żądaniem HTTP Błąd 400. Jest to szczególnie przydatne, gdy spodziewasz się niewielkiego przeniesienia danych i nie chcemy zbyt długo czekać, aż zdobędziecie potencjalnie ogromne poddrzewo. Rzeczywista czas odczytu może się różnić w zależności od rozmiaru danych i pamięci podręcznej.

Podaj wartość timeouts w tym formacie: 3ms, 3s lub 3min z liczbą i jednostką. Jeśli nie, wartość maksymalna timeout z 15min wynosi zastosowano. Jeśli timeout nie jest liczbą dodatnią lub przekracza wartość maksymalną, Żądanie zostanie odrzucone z powodu błędu HTTP 400. W poniższym przykładzie żądanie GET zawiera parametr timeout z 10 sekund.

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

Filtrowanie danych

Możemy tworzyć zapytania służące do filtrowania danych na podstawie różnych czynników. Na początek określ sposób filtrowania danych za pomocą atrybutu orderBy . Następnie możesz połączyć parametr orderBy z dowolnym z pozostałych 5 parametrów: limitToFirst, limitToLast, startAt, endAt i equalTo.

Ponieważ wszyscy w Firebase uważamy, że dinozaury są fajne, użyjemy fragment z przykładowej bazy danych faktów o dinozaurach, aby zademonstrować, możesz filtrować dane:

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

Dane można filtrować na 3 sposoby: według klucza podrzędnego, według klucza lub według wartość. Zapytanie zaczyna się od jednego z tych parametrów, a następnie musi zostać połączone z co najmniej jednym z tych parametrów: startAt, endAt, limitToFirst, limitToLast lub equalTo.

Filtrowanie według określonego klucza podrzędnego

Możemy filtrować węzły według wspólnego klucza podrzędnego, przekazując go do funkcji orderBy . Aby na przykład odzyskać wszystkie dinozaury o wysokości większej niż 3, możemy wykonać następujące czynności:

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

Każdy węzeł, który nie ma klucza podrzędnego, według którego filtrujemy, będzie posortowany według wartości null Szczegółowe informacje na temat można znaleźć w artykule Sposób porządkowania danych.

Firebase obsługuje też zapytania uporządkowane według głęboko zagnieżdżonych elementów podrzędnych, a nie tylko według elementów podrzędnych. Jest to przydatne, jeśli masz głęboko zagnieżdżone dane:

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

Aby przesłać teraz zapytanie o wysokość, używamy pełnej ścieżki do obiektu zamiast pojedynczego klucza:

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

Zapytania można filtrować tylko według 1 klucza naraz. Używanie wielokrotności parametru orderBy dla tego samego żądania powoduje zgłoszenie błędu.

Filtrowanie według klucza

Możemy też filtrować węzły według ich kluczy, używając parametru orderBy="$key". poniższy przykład pobiera wszystkie dinozaury o nazwach zaczynających się od litery a do m:

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

Filtrowanie według wartości

Za pomocą funkcji orderBy="$value" możemy filtrować węzły według wartości ich kluczy podrzędnych . Załóżmy, że dinozaury urządzają zawody sportowe z dinozaurami, a my śledzić swoje wyniki w następującym formacie:

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

Aby odzyskać wszystkie dinozaury z wynikiem powyżej 50, możemy wysłać takie żądanie:

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

Wyjaśnienie dotyczące porządkowania danych znajdziesz w sekcji Jak porządkowane są dane. jak są sortowane wartości null, wartości logiczne, ciągi znaków i obiekty podczas orderBy="$value"

Złożone filtrowanie

Możemy łączyć wiele parametrów, aby tworzyć bardziej złożone zapytania.

Ogranicz zapytania

Parametry limitToFirst i limitToLast służą do ustawiania maksymalną liczbę dzieci, dla których mają być wysyłane dane. Jeśli ustawisz limit na 100, 100 pasujących dzieci. Jeśli w naszej pamięci przechowywanych jest mniej niż 100 wiadomości będziemy przesyłać dane każdego dziecka. Jeśli jednak będziemy mieć ponad 100 wiadomości, będzie odbierać dane dla 100 z tych wiadomości. Będzie to pierwsze 100 zamówionych wiadomości, jeśli przy użyciu funkcji limitToFirst lub listy 100 ostatnio zamówionych wiadomości, jeśli korzystamy z limitToLast

Korzystając z naszej bazy danych o dinozaurach i usługi orderBy, możemy znaleźć dwie najcięższe dinozaury:

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

Podobnie możemy znaleźć dwa najkrótsze dinozaury, używając funkcji limitToFirst:

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

Możemy również wykonywać zapytania dotyczące limitów za pomocą funkcji orderBy="$value". Jeśli chcemy utworzyć z 3 najlepszymi graczami w grze z dinozaurami, moglibyśmy :

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

Zapytania dotyczące zakresów

Wartości startAt, endAt i equalTo pozwalają nam wybrać dla dowolnych punktów początkowych i końcowych zapytań. Jeśli na przykład chcemy znaleźć wszystkie dinozaurów o wysokości co najmniej trzech metrów, możemy łączyć parametry orderBy startAt:

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

Możemy użyć pola endAt, aby znaleźć wszystkie dinozaury, których nazwy pochodzą z czasów poprzedzających pterodaktyl leksykograficznie:

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

Możemy łączyć startAt i endAt, by ograniczyć zakres danych zapytania. Ten przykład pozwala znaleźć wszystkie dinozaury, których nazwy zaczynają się od litery „b”:

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

Zapytania dotyczące zakresów są też przydatne przy dzieleniu danych na strony.

Łączę wszystko w całość

Możemy łączyć wszystkie te techniki, aby tworzyć złożone zapytania. Jeśli na przykład chcesz, aby znaleźć nazwy wszystkich dinozaurów o wzroście krótszym lub równym naszym ulubionym życzliwy, stegozaur:

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"

W jaki sposób dane są porządkowane

W tej sekcji opisujemy, jaka jest kolejność danych, gdy używasz każdego z 3 parametrów filtrowania.

zamówienieWedług

Jeśli używasz orderBy z nazwą klucza podrzędnego, dane zawierające określony będzie on uporządkowany w ten sposób:

  1. Elementy podrzędne z wartością null określonego klucza podrzędnego mają pierwszeństwo.
  2. Następne są elementy podrzędne o wartości false określonego klucza podrzędnego. Jeśli wiele elementów podrzędnych ma wartość false, są posortowane leksykograficznie według klucza.
  3. Następne są elementy podrzędne o wartości true określonego klucza podrzędnego. Jeśli jeśli wiele elementów podrzędnych ma wartość true, są one sortowane leksykograficznie według .
  4. Następne są elementy podrzędne z wartością liczbową, posortowane w kolejności rosnącej. Jeśli więcej dzieci mają tę samą wartość liczbową dla określonego węzła podrzędnego, są one sortowane według klucza.
  5. Ciągi znaków znajdują się po liczbach i są sortowane leksykograficznie w kolejności rosnącej. Jeśli kilka podrzędne mają tę samą wartość w określonym węźle podrzędnym, są uporządkowane leksykograficznie według tonacji.
  6. Obiekty są na końcu i posortowane leksykograficznie według klucza w kolejności rosnącej.
Odfiltrowane wyniki są zwracane w nieuporządkowanej kolejności. Jeśli kolejność danych jest ważna, należy posortować wyniki w aplikacji po ich zwróceniu z Firebase.

orderBy="$klucz"

Jeśli do sortowania danych użyjesz parametru orderBy="$key", zostaną one zwrócone w kolejności rosnącej według klucza. Pamiętaj, że klucze mogą być tylko ciągami znaków.

  1. Dzieci z kluczem, który można przeanalizować jako 32-bitową liczbę całkowitą, są na pierwszym miejscu, posortowane rosnąco zamówienie.
  2. Następny element podrzędny z wartością ciągu znaków jako klucz, posortowany leksykograficznie w kolejności rosnącej zamówienie.

orderBy="$value"

Jeśli do sortowania danych użyjesz parametru orderBy="$value", elementy podrzędne zostaną uporządkowane według wartości. Kryteria sortowania są takie same jak dane uporządkowane według klucza podrzędnego, z wyjątkiem wartości węzła zamiast wartości określonego klucza podrzędnego.

orderBy="$Priorytet"

Jeśli do sortowania danych używasz parametru orderBy="$priority", kolejność są określane według priorytetu i klucza. Pamiętaj, że wartości priorytetów mogą być tylko liczbami lub ciągami tekstowymi.

  1. Dzieci bez priorytetu (domyślnie) są na pierwszym miejscu.
  2. Następne dzieci mają przypisany numer. Są one sortowane liczbowo według priorytetu, od małych do dużych.
  3. Elementy podrzędne z ciągiem znaków mają priorytet na końcu. Są one sortowane leksykograficznie według .
  4. Gdy 2 elementy podrzędne mają ten sam priorytet (w tym brak priorytetu), są sortowane według klucza. Klawisze numeryczne są pierwsze (posortowane w kolejności numerycznej), a potem pozostałe klawisze (posortowane) leksykograficznie).

Więcej informacji o priorytetach znajdziesz Dokumentacja API

Strumieniowe przesyłanie z interfejsu API REST

Punkty końcowe Firebase REST obsługują EventSource / protokołu zdarzeń wysyłanych przez serwer, co ułatwia strumieniowe przesyłanie zmian do pojedynczej lokalizacji w naszych w bazie danych Firebase.

Aby zacząć korzystać ze strumieniowego przesyłania danych, musisz wykonać te czynności:

  1. Ustaw nagłówek Accept klienta na text/event-stream
  2. Przestrzegaj przekierowań HTTP, a w szczególności kodu stanu HTTP 307
  3. Uwzględnij parametr zapytania auth, jeśli wymaga to lokalizacji bazy danych Firebase uprawnienia do odczytu

Z kolei serwer będzie wysyłać nazwane zdarzenia w postaci stanu danych pod żądanym adresem URL. zmian. Struktura tych komunikatów jest zgodna z protokołem EventSource:

event: event name
data: JSON encoded data payload

Serwer może wysyłać te zdarzenia:

Włącz Dane zakodowane w formacie JSON będą obiektem z 2 kluczami: ścieżką i danymi
Ścieżka wskazuje lokalizację względem adresu URL żądania
Klient powinien zastąpić wszystkie dane w tej lokalizacji w pamięci podręcznej danymi podanymi w komunikacie
patch Dane zakodowane w formacie JSON będą obiektem z 2 kluczami: ścieżką i danymi
Ścieżka wskazuje lokalizację względem adresu URL żądania
W przypadku każdego klucza w danych klient powinien zastąpić odpowiedni klucz w pamięci podręcznej danymi tego klucza w wiadomości.
utrzymywanie aktywności Dane tego zdarzenia mają wartość null, nie musisz nic robić
anuluj Dane tego zdarzenia mają wartość null
To zdarzenie zostanie wysłane, jeśli reguły zabezpieczeń Bazy danych czasu rzeczywistego Firebase spowodują, że odczyt w żądanej lokalizacji nie będzie już dozwolony
unieważnienie autoryzacji Dane tego zdarzenia to ciąg znaków wskazujący, że dane logowania wygasły
To zdarzenie zostanie wysłane, gdy podany parametr uwierzytelniania utraci ważność

Poniżej znajduje się przykładowy zestaw zdarzeń, które może wysyłać serwer:

// 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}}

Jeśli używasz Go, wypróbuj Firego, wokół interfejsu API Firebase typu REST i Streamingu.