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ı olduğunda 204 No Content
döndürülür.
curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=silent'
geri çağırma
Web tarayıcısında farklı alan adları arasında REST çağrıları yapmak için yanıtı bir JavaScript geri çağırma işlevine sarmalamak üzere JSONP'yi kullanabilirsiniz. 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, her şeyi indirmenize gerek kalmadan büyük veri kümeleriyle çalışmanıza yardımcı olmak için tasarlanmış gelişmiş bir özelliktir. 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 nesnesiyse her 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.
timeouts
değerini şu biçimi kullanarak belirtin: 3ms
,
3s
veya 3min
, sayı ve birim içerecek şekilde. 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 10 saniyelik bir timeout
içeriyor.
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. Ardından orderBy
'ü diğer beş parametreden herhangi biriyle birleştirirsiniz:
limitToFirst
, limitToLast
, startAt
, endAt
ve equalTo
.
Firebase'de hepimiz dinozorların oldukça havalı olduğunu düşündüğünden, bir örnek veri tabanından alınan bir kesit içeren bu küçük resim, 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. Sorgu bu parametrelerden biriyle başlar ve ardından aşağıdaki parametrelerden biriyle 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 düzey aşağıda olan alt öğeler yerine, derin 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 bir dino spor yarışması yaptığını ve puanlarını aşağıdaki biçimde takip ettiğimizi varsayalım:
{ "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 isteği 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 öğe sayısını belirlemek için kullanılır. 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. En yüksek puana sahip ilk üç dino spor yarışmacısını içeren bir skor tablosu oluşturmak istersek aşağıdakileri yapabiliriz:
curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&limitToLast=3&print=pretty'
Aralık Sorguları
startAt
, endAt
ve equalTo
özelliğini kullanmak, sorgularımız için keyfi başlangıç ve bitiş noktaları seçmemize olanak tanır. Ö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.
sıralama ölçütü
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.
- Dizelerin sırası, sayılardan sonra gelir ve alfabetik olarak artan düzendedir. 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"
parametresi kullanıldığında veriler, aşağıdaki gibi anahtara göre artan düzende döndürülür. 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 öğeler değerlerine göre sıralanır. 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="$priority"
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. Önce sayısal anahtarlar (sayısal olarak sıralanır), ardından kalan anahtarlar (alfabetik olarak sıralanır) gelir.
Ö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ünü destekler. Bu sayede, değişiklikleri Firebase veritabanımızdaki tek bir konuma aktarmak kolaylaşır.
Akış özelliğini kullanmaya başlamak için aşağıdakileri yapmamız gerekir:
-
İstemcinin Accept üstbilgisini
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 geçersiz. 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 etkinlik grubu ö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