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:
-
Elementy podrzędne z wartością
null
określonego klucza podrzędnego mają pierwszeństwo. -
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 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.
- Obiekty są na końcu i posortowane leksykograficznie według klucza w kolejności rosnącej.
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.
- 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 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.
- Dzieci bez priorytetu (domyślnie) są na pierwszym miejscu.
- Następne dzieci mają przypisany numer. Są one sortowane liczbowo 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. 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:
-
Ustaw nagłówek Accept klienta na
text/event-stream
- Przestrzegaj przekierowań HTTP, a w szczególności kodu stanu HTTP 307
-
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.