GET ile Veri Okuma
URL'sine GET
isteği göndererek Firebase veritabanımızdaki verileri okuyabiliriz.
uç nokta. Bir önceki bölümde verilen blog örneğimizle devam edelim ve
blog yayını verileri:
curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'
Başarılı bir istek, 200 OK
HTTP durum kodu ile gösterilir ve
yanıtı, aldığımız verileri içerecektir.
URI Parametreleri Ekleme
REST API, Firebase veritabanımızdan veri okurken çeşitli sorgu parametrelerini kabul eder. En sık kullanılan parametreler aşağıda listelenmiştir. Tam liste için şuraya bakın: REST API Referansı.
auth
auth
istek parametresi,
Firebase Realtime Database Security Rules ve
tüm istek türleri tarafından desteklenir. Bağımsız değişken, Firebase uygulamanızın bir sırrı veya bir
kimlik doğrulama jetonunuz için Firebase Projelerindeki Kullanıcılar başlıklı makaleye göz atın. Aşağıdaki örnekte, auth
içeren bir GET
isteği gönderiyoruz.
parametresinde CREDENTIAL
değeri, Firebase uygulamanızın gizli anahtarı veya
kimlik doğrulama jetonu:
curl 'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'
yazdır
print=pretty
değerinin belirtilmesi, verileri kullanıcılar tarafından okunabilen bir biçimde döndürür.
curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'
print=silent
belirtildiğinde başarılı bir 204 No Content
döndürülür.
curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=silent'
geri çağırma
Kullanabileceğiniz alanlar arasında bir web tarayıcısından REST aramaları yapmak için
Yanıtı JavaScript'te sarmalamak için kullanılan JSONP
geri çağırma işlevinden yararlanırız. REST API'nin döndürülen verilericallback=
geri çağırma işlevine eklemeniz gerekir. Örneğin:
<script> function gotData(data) { console.log(data); } </script> <script src="https://docs-examples.firebaseio.com/fireblog/posts.json?callback=gotData">
sığ
Bu, aşağıdakileri yapmanıza gerek kalmadan büyük veri kümeleriyle çalışmanıza yardımcı olmak için tasarlanmış gelişmiş bir özelliktir.
her şeyi indiremezsiniz. Kullanmak için parametre olarak shallow=true
ekleyin. Bu işlem,
derinliğini artırmaktır. Konumdaki veriler bir JSON temel öğesiyse (dize, sayı,
veya boole) döndürür. Konumdaki veri anlık görüntüsü bir JSON ise
nesnesi yoksa her bir anahtarın değerleri true olarak kısaltılır. Örneğin,
aşağıdaki verileri inceleyin:
{ "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!"
Bu curl
isteğiyle deneyin:
curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?shallow=true&print=pretty'
mola
Sunucu tarafında okuma işleminin ne kadar süreceğini sınırlandırmak için bunu kullanın. Okunmuş istek kendisine verilen sürede bitmezse bir HTTP ile sonlandırılır 400 hatası. Bu, özellikle küçük bir veri aktarımı beklediğiniz durumlarda ve potansiyel olarak büyük bir alt ağacı getirmek için çok uzun süre beklemek istemiyorsunuz. Gerçekleşen okuma süresi, veri boyutuna ve önbelleğe alma işlemine göre değişiklik gösterebilir.
Şu biçimi kullanarak timeouts
değerini belirtin: 3ms
,
bir sayı ve birimle birlikte 3s
veya 3min
. Değilse
belirtildiğinde, 15min
içinden maksimum timeout
değeri şu olacak:
geçerlidir. timeout
pozitif değilse veya maksimum değeri aşıyorsa
isteği, HTTP 400 hatasıyla reddedilir.
Aşağıdaki örnekte, GET
isteği bir
timeout
/10 saniye.
curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?timeout=10s'
Verileri Filtreleme
Verileri çeşitli faktörlere göre filtrelemek için sorgular oluşturabiliriz. Başlamak için, orderBy
kullanarak verilerinizin nasıl filtrelenmesini istediğinizi belirtirsiniz.
parametresinden sonra bir değer girin. Daha sonra, orderBy
parametresini diğer beş parametreden herhangi biriyle birleştiriyorsunuz:
limitToFirst
, limitToLast
, startAt
, endAt
,
ve equalTo
.
Firebase'de hepimiz dinozorların son derece havalı olduğunu düşündüğümüzden dinozorlarla ilgili bilgi içeren örnek bir veritabanından alınan bir kesit Verileri filtreleyebilirsiniz:
{ "lambeosaurus": { "height": 2.1, "length": 12.5, "weight": 5000 }, "stegosaurus": { "height": 4, "length": 9, "weight": 2500 } }
Verileri şu üç yöntemden biriyle filtreleyebiliriz: alt anahtara, anahtara veya
değer belirtin. Bir sorgu bu parametrelerden biriyle başlar ve ardından şu parametrelerden biri veya daha fazlasıyla birleştirilmelidir: startAt
, endAt
, limitToFirst
, limitToLast
veya equalTo
.
Belirtilen alt anahtara göre filtreleme
Ortak bir alt anahtara göre, bu anahtarı orderBy
parametresinden sonra bir değer girin. Örneğin, yüksekliği 3'ten büyük olan tüm dinozorları almak için aşağıdakileri yapabiliriz:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'
Filtrelemede olduğumuz alt anahtarı içermeyen tüm düğümler şu değerle sıralanır:
null
Verilerin nasıl işlendiği ve
nasıl sıralandığı için Veriler Nasıl Sıralanır? konusuna bakın.
Firebase, yalnızca bir seviye altındaki alt öğeler yerine derinlemesine iç içe yerleştirilmiş alt öğelere göre sıralanmış sorguları da destekler. Bu yöntem, aşağıdakiler gibi derinlemesine iç içe yerleştirilmiş verileriniz varsa yararlıdır:
{ "lambeosaurus": { "dimensions": { "height" : 2.1, "length" : 12.5, "weight": 5000 } }, "stegosaurus": { "dimensions": { "height" : 4, "length" : 9, "weight" : 2500 } } }
Yüksekliği şimdi sorgulamak için tek bir anahtar yerine nesnenin tam yolunu kullanırız:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="dimensions/height"&startAt=3&print=pretty'
Sorgular aynı anda yalnızca bir anahtara göre filtrelenebilir. Birden çok orderBy
parametresi kullanma
kez hata mesajı verir.
Anahtara göre filtreleme
Ayrıca, orderBy="$key"
parametresini kullanarak düğümleri anahtarlarına göre filtreleyebiliriz. İlgili içeriği oluşturmak için kullanılan
aşağıdaki örnek, a
ile m
arasındaki harflerden başlayan bir ada sahip tüm dinozorları getirmektedir:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="a"&endAt="m"&print=pretty'
Değere göre filtreleme
orderBy="$value"
kullanarak düğümleri alt anahtarlarının değerine göre filtreleyebiliriz
parametresinden sonra bir değer girin. Dinozorların dinozor sporları yarışması yaptığını ve
skorlarını aşağıdaki formatta takip edebilirsiniz:
{ "scores": { "bruhathkayosaurus": 55, "lambeosaurus": 21, "linhenykus": 80, "pterodactyl": 93, "stegosaurus": 5, "triceratops": 22 } }
Puanı 50'den yüksek olan tüm dinozorları almak için aşağıdaki talebi gönderebiliriz:
curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&startAt=50&print=pretty'
Bu konuyla ilgili bir açıklama için Veriler Nasıl Sıralanır?
kullanıldığında null
, boole, dize ve nesne değerlerinin sıralanma şekli
orderBy="$value"
.
Karmaşık Filtreleme
Daha karmaşık sorgular oluşturmak için birden fazla parametreyi birleştirebiliriz.
Sorguları Sınırla
limitToFirst
ve limitToLast
parametreleri,
veri alınacak maksimum alt çocuk sayısı. 100'lük bir sınır belirlersek yalnızca
100'e kadar eşleşen çocukla karşılaşabilirsiniz. Güvenli Arama'da 100'den az ileti
her çocuğu alıyoruz. Ancak 100'den fazla iletimiz varsa yalnızca
birinci taraf verileri almalarını
kolaylaştırır. Bunlar sıralanan ilk 100 mesaj olacaktır.
kullanıyorsak limitToFirst
veya sipariş edilen son 100 mesajı kullanarak
limitToLast
.
Dinozorlarla ilgili bilgi veritabanımızı ve orderBy
'ı kullanarak bu ikisini,
en ağır dinozorlar:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="weight"&limitToLast=2&print=pretty'
Benzer şekilde, limitToFirst
kullanarak en kısa iki dinozoru bulabiliriz:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&limitToFirst=2&print=pretty'
Ayrıca orderBy="$value"
ile sınır sorgusu gerçekleştirebiliriz. Özel bir kampanya oluşturmak
en yüksek skoru alan üç dinozor takımının skoruna sahip olsak da,
takip etmek için:
curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&limitToLast=3&print=pretty'
Aralık Sorguları
startAt
, endAt
ve equalTo
sayesinde şunları seçebiliriz:
ve bitiş noktaları eklemek için yalnızca rastgele bir zaman aralığı seçin. Örneğin, tüm farklı seçenekler için
boyutu en az üç metre olan dinozorlar için orderBy
ve
startAt
:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'
Adları Pterodaktil'den önce gelen tüm dinozorları bulmak için endAt
işlevini kullanabiliriz.
sözlüksel olarak:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&endAt="pterodactyl"&print=pretty'
Sorgumuzun her iki ucunu da sınırlandırmak için startAt
ve endAt
değerlerini birleştirebiliriz.
Aşağıdaki örnekte, adları "b" ile başlayan tüm dinozorlar bulunmuştur:
curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="b"&endAt="b\uf8ff"&print=pretty'
Aralık sorguları, verilerinizi sayfalara ayırmanız gerektiğinde de yararlı olur.
Tüm unsurların birleşimi
Karmaşık sorgular oluşturmak için tüm bu teknikleri birleştirebiliriz. Örneğin, Yeşil Ofis projenizde boyuna eşit veya daha kısa olan tüm dinozorların adlarını bulmak için nazik, Stegosaurus:
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"
Veriler Nasıl Sıralanır?
Bu bölümde, üç filtreleme parametresinin her biri kullanılırken verilerinizin nasıl sıralandığı açıklanmaktadır.
orderBy
Alt anahtar adıyla orderBy
kullanılırken belirtilen
alt anahtar şu şekilde sıralanır:
-
Belirtilen alt anahtarda
null
değerine sahip olan alt öğeler önce gelir. -
Belirtilen alt anahtar için
false
değerine sahip olan alt öğeler ardından gelir. Eğer birden çok alt öğefalse
değerine sahipse bunlar sıralanır Anahtara göre sözlüksel olarak: -
Belirtilen alt anahtar için
true
değerine sahip olan alt öğeler ardından gelir. Eğer birden çok alt öğetrue
değerine sahipse bu öğeler sözlüksel olarak şuna göre sıralanır: tuşuna basın. - Sayısal değere sahip olan alt öğeler artan düzende sıralanır. Birden fazla çocuksa belirtilen alt düğüm için aynı sayısal değere sahipseler, anahtara göre sıralanırlar.
- Dizeler sayılardan sonra gelir ve sözlüksel olarak artan düzende sıralanır. Birden fazla alt düğüm için belirtilen alt düğüm için aynı değere sahip olduklarında, anahtar kelime düzeyinde özetleyebilirsiniz.
- Nesneler en sonda yer alır ve sözlüklere göre anahtara göre artan düzende sıralanır.
OrderBy="$key"
Verilerinizi sıralamak için orderBy="$key"
parametresini kullandığınızda veriler döndürülür
anahtara göre artan düzende aşağıdaki gibi sıralayabilirsiniz. Anahtarların yalnızca dize olabileceğini unutmayın.
- 32 bit tam sayı olarak ayrıştırılabilen bir anahtarı olan alt öğeler önce gelir ve artan düzende sıralanır sipariş.
- Anahtarlarında dize değeri olan ve kelimelik olarak artan düzende sıralanmış alt öğeler sırada gelir sipariş.
orderBy="$value"
Verilerinizi sıralamak için orderBy="$value"
parametresini kullandığınızda, alt yayıncılar
sırasına göre sıralayabilirsiniz. Sıralama ölçütleri, alt anahtara göre sıralanan verilerle aynıdır.
tek farkı, belirtilen bir alt anahtarın değeri yerine düğümün değerinin kullanılmasıdır.
OrderBy="$öncelik"
Verilerinizi sıralamak için orderBy="$priority"
parametresini kullanırken
öncelikleri ve temel unsurları belirlerler. Öncelik değerlerinin,
sayı veya dize olabilir.
- Önceliği olmayan çocuklar (varsayılan) önce gelir.
- Önceliği telefon numarası olan çocuklar gelir. Önceliğe göre sayısal olarak sıralanırlar küçükten büyüğe.
- Önceliği dize olan alt öğeler en sondadır. Bu terimler sözlüksel olarak öncelik sırasına koyabilirsiniz.
- İki alt öğe aynı önceliğe sahip olduğunda (öncelikler dahil) anahtara göre sıralanır. Sayısal anahtarlar önce gelir (sayısal olarak sıralanır), ardından geri kalan tuşlar (sıralı) (sözlüksel olarak).
Öncelikler hakkında daha fazla bilgi için API referansı.
REST API'den akış
Firebase REST uç noktaları, EventSource / Sunucu Tarafından Gönderilen Etkinlikler protokolü, Firebase veritabanı.
Akış özelliğini kullanmaya başlamak için aşağıdakileri yapmamız gerekir:
-
Müşterinin Kabul et başlığını
text/event-stream
olarak ayarlayın - HTTP Yönlendirmelerine, özellikle de 307 kodlu HTTP durum koduna uyun
-
Firebase veritabanı konumu gerektiriyorsa
auth
sorgu parametresini ekleyin okuma izni
Karşılık olarak sunucu, adlandırılmış etkinlikleri istenen URL'deki verilerin durumu olarak gönderir anlamına gelir. Bu mesajların yapısı, EventSource protokolüne uygundur:
event: event name data: JSON encoded data payload
Sunucu aşağıdaki etkinlikleri gönderebilir:
koy | JSON kodlu veriler, yol ve veri olmak üzere iki anahtara sahip bir nesne olur. Yol, istek URL'sine göre bir konuma işaret eder İstemci, önbelleğinde bu konumdaki tüm verileri mesajda verilen verilerle değiştirmelidir. |
patch | JSON kodlu veriler, yol ve veri olmak üzere iki anahtara sahip bir nesne olur. Yol, istek URL'sine göre bir konuma işaret eder İstemci, verilerdeki her bir anahtar için önbelleğindeki ilgili anahtarı iletideki anahtara ait verilerle değiştirmelidir. |
keep-alive | Bu etkinlikle ilgili veriler boş. Herhangi bir işlem yapmanız gerekmez |
iptal etmek | Bu etkinliğe ait veriler boş Firebase Realtime Database Security Rules, istenen konumda okuma yapılmasına artık izin verilmemesine neden olursa bu etkinlik gönderilir |
kimlik doğrulama iptal edildi | Bu etkinlikle ilgili veriler, bir kimlik bilgisinin süresinin sona erdiğini gösteren bir dizedir Bu etkinlik, sağlanan kimlik doğrulama parametresi artık geçerli olmadığında gönderilir |
Aşağıda, sunucunun gönderebileceği bir dizi etkinlik örneği verilmiştir:
// 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}}
Go kullanıyorsanız Firego'nun Firebase REST ve Streaming API'leri kapsayan üçüncü taraf sarmalayıcılar