Odczytywanie danych za pomocą metody GET
Dane z naszej bazy danych Firebase możemy odczytać, wysyłając żądanie GET
do jego punktu końcowego URL. 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
Interfejs REST API akceptuje kilka parametrów zapytania podczas odczytu danych z naszej bazy danych Firebase. 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
Firebase Realtime Database Security Rules i to
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'
drukuj
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 REST API owi zawinął zwracane dane w określonej przez Ciebie 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'
czas oczekiwania
Służy do ograniczenia długości 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. Rzeczywisty czas odczytu może się różnić w zależności od rozmiaru danych i wykorzystywania 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 wartość timeout
nie jest dodatnia lub przekracza wartość maksymalną, żądanie zostanie odrzucone z błędem 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 o tym, jak są sortowane dane, znajdziesz w artykule Sortowanie 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 teraz zapytać o wysokość, użyjemy 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 mogą być filtrowane 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 znajdziesz w sekcji W jaki sposób 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 ustawimy limit na 100 wartości, otrzymamy maksymalnie 100 wartości podrzędnych. 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.
W tym przykładzie zostaną znalezione wszystkie dinozaury, których nazwa zaczyna 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 wyjaśniamy, jak są sortowane dane, gdy używasz każdego z 3 parametrów filtrowania.
zamówienieWedług
Gdy używasz funkcji orderBy
z nazwą klucza podrzędnego, dane zawierające określony klucz podrzędny zostaną posortowane w ten sposób:
-
Najpierw są wybierane elementy podrzędne, dla których wartość atrybutu podrzędnego to
null
. -
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. -
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 . - 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.
- Ciągi znaków występują po liczbach i są sortowane alfabetycznie 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.
- Obiekty są na końcu i posortowane leksykograficznie według klucza w kolejności rosnącej.
orderBy="$key"
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.
- Dzieci z kluczem, który można przeanalizować jako 32-bitową liczbę całkowitą, są na pierwszym miejscu, posortowane rosnąco zamówienie.
- 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 tym że zamiast wartości określonego klucza podrzędnego jest używana wartość węzła.
orderBy="$Priorytet"
Gdy do sortowania danych używasz parametru orderBy="$priority"
, kolejność dzieci jest określana przez ich priorytet i klucz w następujący sposób: Pamiętaj, że wartości priorytetu mogą być tylko liczbami lub ciągami znaków.
- Najpierw są wyświetlane dzieci bez priorytetu (domyślnie).
- Następne dzieci mają przypisany numer. Są one sortowane numerycznie według priorytetu, od małych do dużych.
- Elementy podrzędne z ciągiem znaków mają priorytet na końcu. Są one sortowane leksykograficznie według .
- Gdy 2 elementy podrzędne mają ten sam priorytet (w tym brak priorytetu), są sortowane według klucza. Najpierw podawane są klucze liczbowe (posortowane według wartości liczbowej), a potem pozostałe klucze (posortowane alfabetycznie).
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 rozpocząć strumieniowe przesyłanie danych, wykonaj te czynności:
-
Ustaw nagłówek Accept klienta na
text/event-stream
- Przestrzegaj przekierowań HTTP, w szczególności kodu stanu HTTP 307
-
Uwzględnij parametr zapytania
auth
, jeśli wymaga to lokalizacji bazy danych Firebase uprawnienia do odczytu
W zamian serwer będzie wysyłać nazwane zdarzenia, gdy stan danych pod podanym adresem URL będzie się zmieniać. 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 zdarzenie Firebase Realtime Database Security Rules sprawi, ż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.