Wykorzystanie interfejsu API
Jako punktu końcowego REST możesz użyć dowolnego adresu URL Bazy danych czasu rzeczywistego Firebase. Wszystko, czego potrzebujesz
należy dodać .json
na końcu adresu URL i wysłać żądanie
z Twojego ulubionego klienta HTTPS.
Wymagany jest protokół HTTPS. Firebase odpowiada tylko na zaszyfrowany ruch, więc Twoje dane są bezpieczne.
GET – odczytywanie danych
Dane z urządzenia Realtime Database można odczytać, wysyłając żądanie HTTP
GET
do punktu końcowego. Przykład poniżej
pokazuje, jak można pobrać dane użytkownika
nazwę zapisaną wcześniej w usłudze Realtime Database.
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Udane żądanie jest sygnalizowane przez HTTP 200 OK
kodu stanu. Odpowiedź zawiera dane powiązane z parametrem
w żądaniu GET
.
{ "first": "Jack", "last": "Sparrow" }
PUT – Zapisywanie danych
Dane można zapisywać za pomocą żądania PUT
.
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Udane żądanie jest sygnalizowane przez HTTP 200 OK
kodu stanu. Odpowiedź zawiera dane określone w tagu
Prośba o: PUT
.
{ "first": "Jack", "last": "Sparrow" }
POST – przekazywanie danych
Aby uzyskać odpowiednik JavaScriptu push()
(patrz Listy danych),
możesz wysłać prośbę POST
.
curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' \ 'https://[PROJECT_ID].firebaseio.com/message_list.json'
Udane żądanie jest sygnalizowane stanem HTTP 200 OK
w kodzie. Odpowiedź zawiera nazwę podrzędną nowych danych
określone w żądaniu POST
.
{ "name": "-INOQPH-aV_psbk3ZXEX" }
PATCH – Aktualizowanie danych
Możesz zaktualizować elementy podrzędne w lokalizacji bez zastępowania ich
dotychczasowe dane za pomocą żądania PATCH
. Dzieci otrzymały imiona
dane zapisywane za pomocą funkcji PATCH
są zastępowane, ale są pomijane
elementy podrzędne nie są usuwane. Jest to odpowiednik JavaScriptu
update()
.
curl -X PATCH -d '{"last":"Jones"}' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'
Udane żądanie jest sygnalizowane stanem HTTP 200 OK
w kodzie. Odpowiedź zawiera dane określone w tagu
Prośba o: PATCH
.
{ "last": "Jones" }
USUŃ – usuwanie danych
Jeśli chcesz usunąć dane, wyślij prośbę DELETE
:
curl -X DELETE \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Udane żądanie DELETE
jest wskazywane przez
Kod stanu HTTP 200 OK
z odpowiedzią zawierającą JSON
null
Zastąpienie metody
Jeśli wykonujesz wywołania REST w przeglądarce, która nie obsługuje
poprzednich metod, możesz zastąpić metodę żądania, tworząc
POST
żądanie i ustawianie metody za pomocą funkcji
w nagłówku żądania X-HTTP-Method-Override
.
curl -X POST -H "X-HTTP-Method-Override: DELETE" \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Możesz też użyć parametru zapytania x-http-method-override
.
curl -X POST \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json?x-http-method-override=DELETE'
Żądania warunkowe
Żądania warunkowe, będące odpowiednikiem operacji transakcji pakietu SDK REST, aktualizują dane zgodnie z określony warunek. Zapoznaj się z omówieniem przepływu pracy i dowiedz się więcej o żądaniach warunkowych dla REST w sekcji Zapisywanie danych.
ETag Firebase
ETag Firebase to unikalny identyfikator bieżących danych w określonej lokalizacji. Jeśli
lub inne dane,
zmienia się też tag ETag. Tag ETag Firebase należy określić w sekcji
w nagłówku początkowego żądania REST (zwykle jest to
GET
, ale może być cokolwiek innego niż PATCH
).
curl -i 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
jeśli-dopasowanie
Warunek if-match
określa wartość ETag danych, które chcesz zaktualizować.
Jeśli użyjesz warunku, Realtime Database realizuje tylko żądania, w których przypadku tag ETag określony w parametrze
żądanie zapisu pasuje do ETag istniejących danych w bazie danych. Pobierz
ETag w lokalizacji z żądaniem ETag Firebase. Jeśli chcesz zastąpić dowolną lokalizację
null, użyj null_etag
.
curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match: [ETAG_VALUE]'
Oczekiwane odpowiedzi
W tabeli poniżej znajdziesz przegląd oczekiwanych odpowiedzi w przypadku poszczególnych typów żądań: na podstawie dopasowania ETag.
Typ wniosku | „X-Firebase-ETag: true” | ETag pasuje do if_match: <matching etag> |
ETag nie pasuje do if_match: <no matching etag> |
|
---|---|---|---|---|
POBIERZ | Stan i treść odpowiedzi | 200: "<ścieżka_danych>" | 400: „...nieobsługiwany..” | 400: „...nieobsługiwany..” |
Dodane nagłówki | ETag: <ETag_danych> | Nie dotyczy | Nie dotyczy | |
UDERZENIE | Stan i treść odpowiedzi | 200: „<dane_danych>” | 200: „<dane_danych>” | 412: „...Niezgodność tagów..” |
Dodane nagłówki | ETag: <ETag_of_put_data>, | Nie dotyczy | ETag: <baza_danych_ETag> | |
POST | Stan i treść odpowiedzi | 200: „<dane_postów>” | 400: „...nieobsługiwany..” | 400: „...nieobsługiwany..” |
Dodane nagłówki | ETag: <ETag_of_post_data> | Nie dotyczy | Nie dotyczy | |
WERSJA | Stan i treść odpowiedzi | 400: „...nieobsługiwany..” | 400: „...nieobsługiwany..” | 400: „...nieobsługiwany..” |
Dodane nagłówki | Nie dotyczy | Nie dotyczy | Nie dotyczy | |
USUŃ | Stan i treść odpowiedzi | 200: wartość null | 200: „<data_after_put>” | 412: „...Niezgodność tagów..” |
Dodane nagłówki | ETag: <ETag_of_null> | Nie dotyczy | ETag: <baza_danych_ETag> |
Parametry zapytania
Interfejs API typu REST bazy danych Firebase akceptuje poniższe parametry zapytania i wartości:
access_token
Obsługiwane przez wszystkie typy żądań. Uwierzytelnia to żądanie, aby zezwolić na dostępu do danych chronionych przez Firebase Realtime Database Security Rules. Zobacz dokumentacji uwierzytelniania REST.
curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'
płytka
To zaawansowana funkcja zaprojektowana do pracy z dużymi
na zbiorach danych bez konieczności pobierania wszystkiego. Ustaw na
true
, aby ograniczyć szczegółowość zwracanych danych
w danym miejscu. Jeśli dane w lokalizacji są obiektem podstawowym JSON
(ciąg znaków, liczba lub wartość logiczna), jego wartość zostanie po prostu zwrócona. Jeśli
zrzut danych w tej lokalizacji jest obiektem JSON,
wartości każdego klucza zostaną skrócone do true
.
Argumenty | Metody REST | Opis |
---|---|---|
płytki | POBIERZ | Ogranicz złożoność odpowiedzi. |
curl 'https://[PROJECT_ID].firebaseio/.json?shallow=true'
Pamiętaj, że zapytania shallow
nie można łączyć z żadnym innym zapytaniem.
.
drukuj
Formatuje dane zwrócone z serwera w odpowiedzi.
Argumenty | Metody REST | Opis |
---|---|---|
ładne | GET, PUT, POST, PATCH, DELETE | Wyświetl dane w formacie zrozumiałym dla człowieka. |
ciche | GET, PUT, POST, PATCH |
Służy do blokowania danych wyjściowych serwera podczas zapisywania danych.
Otrzymana odpowiedź będzie pusta i oznaczona symbolem
kod stanu HTTP 204 No Content .
|
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=pretty'
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=silent'
wywołanie zwrotne
Obsługiwane tylko przez GET
. Wykonywanie wywołań REST w przeglądarce
między domenami, możesz użyć formatu JSONP, aby opakować odpowiedź w kodzie JavaScript
funkcji wywołania zwrotnego. Dodaj callback=
, aby opakować interfejs API REST
zwrócone dane w określonej funkcji wywołania zwrotnego.
<script> function gotData(data) { console.log(data); } </script> <script src="https://[PROJECT_ID].firebaseio.com/.json?callback=gotData"></script>
format
Jeśli ustawisz wartość export
, serwer zakoduje priorytety w
.
Argumenty | Metody REST | Opis |
---|---|---|
eksport | POBIERZ | Umieść w odpowiedzi informacje o priorytecie. |
curl 'https://[PROJECT_ID].firebaseio.com/.json?format=export'
pobierz
Obsługiwane tylko przez GET
. Jeśli chcesz wywołać plik
pobierz swoje dane z przeglądarki, dodaj download=
.
Powoduje to, że usługa REST dodaje odpowiednie nagłówki,
że przeglądarki muszą zapisać dane w pliku.
curl 'https://[PROJECT_ID].firebaseio/.json?download=myfilename.txt'
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.
Limit wielkości zapisu
Aby ograniczyć rozmiar zapisu, może określić parametr zapytania
writeSizeLimit
jako
tiny
(cel=1 s), small
(cel=10 s),
medium
(cel=30 s), large
(cel=60 s).
Baza danych czasu rzeczywistego szacuje rozmiar każdego żądania zapisu i przerywa
żądań, które trwają dłużej niż czas docelowy.
Jeśli wybierzesz unlimited
, bardzo duże zapisy (do 256 MB ładunku)
są dozwolone, co może blokować kolejne żądania, gdy baza danych przetwarza
podczas wykonywania bieżącej operacji. Nie można anulować zapisów po dotarciu do serwera.
curl -X DELETE 'https://docs-examples.firebaseio.com/rest/delete-data.json?writeSizeLimit=medium'
Jeśli zapis jest zbyt duży, zobaczysz ten komunikat o błędzie:
Error: WRITE_TOO_BIG: Data to write exceeds the maximum size that can be modified with a single request.
Dodatkowo możesz ustawić defaultWriteSizeLimit
dla całej bazy danych.
za pomocą interfejsu wiersza poleceń Firebase. Ten limit dotyczy wszystkich żądań, w tym żądań z pakietów SDK.
Tworzone są nowe bazy danych z wartością defaultWriteSizeLimit
ustawioną na large
.
Nie możesz ustawić wartości defaultWriteSizeLimit
na tiny
za pomocą interfejsu wiersza poleceń Firebase.
firebase database:settings:set defaultWriteSizeLimit large
orderBy
Zapoznaj się z sekcją przewodnika dotyczącą uporządkowane dane .
limitToFirst, limitToLast, startAt, endAt, równeTo
Zapoznaj się z sekcją przewodnika dotyczącą filtrowania danych dla znajdziesz więcej informacji.
Strumieniowe przesyłanie z interfejsu API REST
Punkty końcowe Firebase REST obsługują EventSource / zdarzenia wysłane przez serwer protokołu. Aby przesyłać strumieniowo zmiany do jednej lokalizacji na koncie Realtime Database, musisz wykonać kilka czynności:
-
Ustaw nagłówek Accept klienta na
"text/event-stream"
- Przestrzegaj przekierowań HTTP, a w szczególności kodu stanu HTTP 307
-
Jeśli lokalizacja wymaga uprawnień do odczytu, musisz dołączyć parametr
Parametr
auth
Z kolei serwer będzie wysyłać nazwane zdarzenia jako stan danych w
żądany adres URL ulegnie zmianie. Struktura tych wiadomości jest zgodna z
protokół EventSource
.
event: event name data: JSON encoded data payload
Serwer może wysyłać te zdarzenia:
Włącz
Dane zakodowane w formacie JSON to obiekt z 2 kluczami: path i danych. Ścieżka w stosunku do adresu URL z żądania. Klient powinien zastąpić wszystkie z tych dane w tej lokalizacji w pamięci podręcznej razem z atrybutem data.
patch
Dane zakodowane w formacie JSON to obiekt z 2 kluczami: path i danych. Ścieżka w stosunku do adresu URL z żądania. Dla każdego klucza w data, klient powinien zastąpić odpowiadającym kluczowi w jego pamięci podręcznej z danymi tego klucza z wiadomości.
utrzymywanie aktywności
Dane tego zdarzenia: null
. Nie musisz podejmować żadnych działań.
anuluj
Niektóre nieoczekiwane błędy mogą wysłać zdarzenie „cancel” (anulowanie) i zakończyć połączenie. Przyczyna jest opisana w danych dostarczonych dla tego zdarzenia. Niektóre potencjalne przyczyny następujące: 1. Firebase Realtime Database Security Rules nie zezwala już na odczyt w żądanej lokalizacji. Opis „dane” tej przyczyny to „Odmowa dostępu”. 2. Zapis aktywował transmisję strumieniową zdarzeń, która wysłała duże drzewo JSON, które przekracza nasz limit. 512MB. „Dane” z tej przyczyny to „Określony ładunek jest zbyt duży. Poproś o o lokalizacji z mniejszą ilością danych”.
unieważnienie autoryzacji
Dane tego zdarzenia to ciąg znaków wskazujący, że dane logowania
wygasła. To zdarzenie jest wysyłane, gdy podany element auth
jest już nieważny.
Oto 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}}
Priorytety
Do informacji o priorytecie lokalizacji można się odwołać za pomocą
„wirtualne dziecko” o nazwie .priority
. Priorytety możesz odczytać w następujący sposób:
Żądania typu GET
i zapisz je w żądaniach typu PUT
.
Na przykład to żądanie pobiera priorytet
users/tom
węzeł:
curl 'https://[PROJECT_ID].firebaseio/users/tom/.priority.json'
Aby w tym samym czasie zapisać priorytet i dane, możesz dodać atrybut
.priority
do ładunku JSON:
curl -X PUT -d '{"name": {"first": "Tom"}, ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom.json'
Aby zapisać priorytet i wartość podstawową (np. ciąg znaków) jednocześnie,
możesz dodać element podrzędny .priority
i umieścić wartość podstawową
w przypadku dziecka z .value
:
curl -X PUT -d '{".value": "Tom", ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom/name/first.json'
Powoduje to zapis "Tom"
z priorytetem 1.0
.
Priorytety można umieszczać w ładunku JSON na dowolnym poziomie.
Wartości serwera
Wartości serwera w lokalizacji możesz zapisywać za pomocą wartości zmiennej, która
to obiekt z jednym kluczem .sv
. Wartość tego klucza to
typ wartości serwera, którą chcesz ustawić. Na przykład:
ustawia wartość węzła na obecną wartość serwera Firebase
sygnatura czasowa:
curl -X PUT -d '{".sv": "timestamp"}' \ 'https://[PROJECT_ID].firebaseio/users/tom/startedAtTime.json'
Priorytety można też zapisywać za pomocą wartości serwera za pomocą polecenia „wirtualne dziecko” wskazanej powyżej ścieżki.
Obsługiwane wartości serwera obejmują:
Wartość serwera | |
---|---|
sygnatura czasowa | Czas od epoki UNIX (w milisekundach). |
wzrost | Podaj liczbę całkowitą lub wartość delta zmiennoprzecinkowej w postaci
{ ".sv": {"increment": <delta_value> }} , który określa atomowo
zwiększyć bieżącą wartość bazy danych. Jeśli dane jeszcze nie istnieją, aktualizacja zostanie ustawiona
do wartości delta. Jeśli jedna z wartości delta lub istniejące dane są swobodne
liczby punktów, obie te wartości zostaną zinterpretowane jako liczby zmiennoprzecinkowe i zastosowane do funkcji
podwójnej wartości. Podwójna arytmetyka i reprezentacja wartości podwójnej precyzji
Semantyka IEEE 754. Jeśli występuje dodatnie/ujemne przekroczenie liczby całkowitej, obliczana jest suma
podwójnej precyzji. |
Pobieram i aktualizuję aplikację Firebase Realtime Database Security Rules
Za pomocą interfejsu API REST można również pobierać i aktualizować Firebase Realtime Database Security Rules za do projektu Firebase. Potrzebny będzie tajny klucz projektu Firebase, znajdziesz w sekcji panelu Konta usługi w projekcie Firebase .
curl 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET' curl -X PUT -d '{ "rules": { ".read": true } }' 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET'
Uwierzytelniaj żądania
Domyślnie żądania REST są wykonywane bez uwierzytelniania i będą skuteczne tylko wtedy, gdy
Reguły Realtime Database zezwalają na publiczny dostęp z uprawnieniami do odczytu i zapisu w:
danych. Aby uwierzytelnić żądanie, użyj
Parametry zapytania access_token=
lub auth=
.
Więcej informacji o uwierzytelnianiu za pomocą interfejsu API REST znajdziesz w artykule Uwierzytelniaj żądania REST.
Warunki błędu
Interfejs API typu REST Firebase Database może zwrócić poniższe kody błędów.
Kody stanu HTTP | |
---|---|
400 Nieprawidłowe żądanie |
Jeden z tych warunków błędu:
|
401 Brak autoryzacji |
Jeden z tych warunków błędu:
|
404 Nie znaleziono | Nie znaleziono określonego elementu Realtime Database. |
500 – wewnętrzny błąd serwera | Serwer zwrócił błąd. Więcej informacji znajdziesz w komunikacie o błędzie . |
503 Usługa niedostępna | Podana Baza danych czasu rzeczywistego Firebase jest tymczasowo niedostępna, co oznacza, że prośba nie została podjęta. |
412 Nie spełniono warunku wstępnego | Podana w żądaniu wartość ETag w nagłówku if-match nie była zgodna z wartością serwera. |