Veri Alma

GET ile Veri Okuma

Biz düzenlenmek suretiyle bizim Firebase veritabanından veri okuyabilir GET URL'sini uç noktasına isteği. Önceki bölümdeki blog örneğimizle devam edelim ve tüm blog gönderisi verilerimizi okuyalım:

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'

Başarılı bir istek, bir tarafından belirtilecektir 200 OK HTTP durum kodu ve yanıt verilerini Bizler Geri Alma içerecektir.

URI Parametreleri Ekleme

REST API, Firebase veritabanımızdan veri okurken birkaç sorgu parametresini kabul eder. Aşağıda en sık kullanılan parametreler listelenmiştir. Tam liste için, bakınız DİNLENME API Başvurusu .

yetki

auth isteği parametresi ile korunan verilere erişim sağlar Firebase Gerçek Zamanlı Veri Tabanı Kuralları ve tüm istek türleri tarafından desteklenmektedir. Argüman ya açıklanan şekilde Firebase uygulamanın sırrı veya bir kimlik doğrulama, jetonun olabilir Firebase Projeleri Kullanıcılar . Aşağıdaki örnekte biz göndermek GET bir ile isteği auth parametresi, CREDENTIAL ya da Firebase uygulamanın gizli ya da kimlik doğrulama belirteci geçerli:

curl 'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'

Yazdır

Belirleme print=pretty döndürür bir insan tarafından okunabilir formatta veri.

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=pretty'

Belirleme print=silent döndürür bir 204 No Content başarısı üzerine.

curl 'https://docs-examples.firebaseio.com/fireblog/posts.json?print=silent'

geri çağırmak

Etki alanlarında bir web tarayıcısından DİNLENME arama yapmak için kullanabilirsiniz JSONP bir JavaScript geri arama işlevi tepkisini sarmak için. Ekle callback= REST API belirttiğiniz geri arama işlevi döndürülen verileri sarmak için. Ö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, eklemek shallow=true parametre olarak. Bu, döndürülen verilerin derinliğini sınırlayacaktır. Konumdaki veriler bir JSON ilkel (dize, sayı veya boole) ise, değeri basitçe döndürülecektir. Konumdaki veri anlık bir JSON nesnesi ise, her anahtar için değerler true kesilecek. Örneğin, aşağıdaki verileri kullanarak:

{
  "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!"

Bununla Deneyin curl isteği:

curl 'https://docs-examples.firebaseio.com/rest/retrieving-data.json?shallow=true&print=pretty'

zaman aşımı

Sunucu tarafında okumanın ne kadar süreceğini sınırlamak için bunu kullanın. Bir okuma isteği ayrılan süre içinde bitmezse, HTTP 400 hatasıyla sona erer. Bu, özellikle küçük bir veri aktarımı beklediğiniz ve potansiyel olarak büyük bir alt ağaç almak için çok uzun süre beklemek istemediğiniz zaman kullanışlıdır. Gerçek okuma süresi, veri boyutuna ve önbelleğe almaya göre değişebilir.

Belirtin timeouts : aşağıdaki biçimi kullanarak 3ms , 3s veya 3min bir sayı ve bir birim ile,. Belirtilen Değilse, maksimum timeout ait 15min uygulanacaktır. Eğer timeout pozitif değilse veya üst sınırı aşıyor, istek, HTTP 400 hata ile reddedilecektir. Aşağıdaki örnekte, GET isteği içerir timeout 10 saniyelik.

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, size veri kullanılarak filtre olmak istiyorum nasıl belirtmek orderBy parametresini. Ardından, birleştirmek orderBy : diğer beş parametrelerin herhangi biriyle limitToFirst , limitToLast , startAt , endAt ve equalTo .

Firebase'de hepimiz dinozorların oldukça havalı olduğunu düşündüğümüzden, verileri nasıl filtreleyebileceğinizi göstermek için örnek bir dinozor gerçekleri veri tabanından bir pasaj kullanacağız:

{
  "lambeosaurus": {
    "height": 2.1,
    "length": 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height": 4,
    "length": 9,
    "weight": 2500
  }
}

Biz üç yoldan biriyle verileri filtreleyebilirsiniz: çocuk anahtar ile, anahtar ile veya değerine göre. Bir sorgu bu parametrelerden biri ile başlar ve daha sonra bunu aşağıdaki parametrelerin ile birlikte olmalıdır: startAt , endAt , limitToFirst , limitToLast veya equalTo .

Belirtilen bir alt anahtara göre filtreleme

Biz bu tuşa geçirerek ortak bir çocuk anahtar ile düğümleri filtre orderBy parametresi. Ö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'

Üzerinde filtreledikleri çocuk anahtarı olmayan tüm düğüm değeri ile sıralanır null . Veri sıralanır ilgili ayrıntılar için bkz Veri Sıralı nasıl .

Firebase ayrıca, yalnızca bir düzey alt düzeydeki çocuklar yerine, derinlemesine yuvalanmış çocuklar tarafından sipariş edilen sorguları da destekler. Bu, aşağıdaki gibi derinlemesine iç içe geçmiş verileriniz varsa kullanışlı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ıyoruz:

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. Kullanılması orderBy aynı istek üzerine birden çok kez parametresi hata verir.

Anahtara göre filtreleme

Biz Ayrıca filtre kullanarak tuşları ile düğümler orderBy="$key" parametresi. Aşağıdaki örnek mektup ile başlayan bir adla bütün dinozorları alır a yoluyla m :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="a"&endAt="m"&print=pretty'

Değere göre filtreleme

Biz kullanarak çocuklarının tuşlarının değerine göre düğümleri filtre orderBy="$value" parametresini. Diyelim ki dinozorlar bir dino sporları yarışması yapıyorlar ve skorlarını aşağıdaki formatta takip ediyoruz:

{
  "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 yapabiliriz:

curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&startAt=50&print=pretty'

Bkz Veri Sıralı nasıl nasıl bir açıklama için null kullanılırken, boolean, string ve nesne değerleri sıralanır orderBy="$value" .

Karmaşık Filtreleme

Daha karmaşık sorgular oluşturmak için birden çok parametreyi birleştirebiliriz.

Sorguları Sınırla

limitToFirst ve limitToLast parametreleri veri almak için çocukların maksimum sayısını ayarlamak için kullanılır. 100'lük bir sınır belirlersek, yalnızca 100'e kadar eşleşen çocuğu alırız. Veritabanımızda saklanan 100'den az mesajımız varsa, her çocuğu alacağız. Ancak, 100'den fazla mesajımız varsa, bu mesajlardan yalnızca 100'ü için veri alacağız. Kullandığımız takdirde bu ilk 100 sipariş mesajlar olacak limitToFirst biz veya kullanılıyorsa son 100 sipariş mesajlar limitToLast .

Bizim dinozor gerçekler veritabanı ve kullanma orderBy , iki ağır dinozorlar bulabilirsiniz:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="weight"&limitToLast=2&print=pretty'

Benzer şekilde, kullanarak iki kısa dinozorlar bulabilirsiniz limitToFirst :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&limitToFirst=2&print=pretty'

Biz de birlikte sınır sorguları gerçekleştirebilirsiniz orderBy="$value" . En yüksek puan alan üç dino spor yarışmacısı ile bir lider tablosu oluşturmak istiyorsak, şunları yapabiliriz:

curl 'https://dinosaur-facts.firebaseio.com/scores.json?orderBy="$value"&limitToLast=3&print=pretty'

Aralık Sorguları

Kullanılması startAt , endAt ve equalTo bize sorguları için keyfi başlangıç ve bitiş noktalarını seçmenize olanak verir. Biz en az üç metre boyunda bütün dinozorları bulmak istiyorsa Örneğin, biz birleştirebilirsiniz orderBy ve startAt :

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="height"&startAt=3&print=pretty'

Biz kullanabilirsiniz endAt isimleri sözlük sırasında Pterodaktil önce gelen bütün dinozorlar bulmak için:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&endAt="pterodactyl"&print=pretty'

Biz birleştirebilirsiniz startAt ve endAt bizim sorgunun her iki ucunu sınırlamak için. Aşağıdaki örnek, adı "b" harfiyle başlayan tüm dinozorları bulur:

curl 'https://dinosaur-facts.firebaseio.com/dinosaurs.json?orderBy="$key"&startAt="b"&endAt="b\uf8ff"&print=pretty'

Aralık sorguları, verilerinizi sayfalandırmanız gerektiğinde de yararlıdır.

Hepsini bir araya koy

Karmaşık sorgular oluşturmak için tüm bu teknikleri birleştirebiliriz. Örneğin, en sevdiğimiz tür olan Stegosaurus'a eşit veya daha kısa olan tüm dinozorların adını bulmak isteyebilirsiniz:

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üm, üç filtreleme parametresinin her birini kullanırken verilerinizin nasıl sıralandığını açıklar.

tarafından sipariş

Kullanırken orderBy çocuk tuşu, şöyle belirtilen çocuk anahtar sipariş edilecek içerdiği veri adıyla:

  1. Bir olan çocuklar null belirtilen çocuk anahtarı için değer önce gelir.
  2. Değeriyle Çocuklar false belirtilen çocuk anahtarı için bir sonraki gelir. Birden çocuklar değeri varsa false , bunlar sıralanır sözlük sırasında anahtar ile.
  3. Değerinde olan çocuklar true belirtilen çocuk anahtarı için bir sonraki gelir. Birden çocukların bir değeri varsa true , bunlar anahtar ile leksikografik sıralanır.
  4. Sayısal değeri olan çocuklar, artan düzende sıralanır. Birden çok alt öğe, belirtilen alt düğüm için aynı sayısal değere sahipse, bunlar anahtara göre sıralanır.
  5. Dizeler sayılardan sonra gelir ve sözlükbilimsel olarak artan düzende sıralanır. Birden çok alt öğe, belirtilen alt düğüm için aynı değere sahipse, anahtara göre sözlükbilimsel olarak sıralanır.
  6. Nesneler en sonda gelir ve artan düzende anahtara göre sözlükbilimsel olarak sıralanır.
Filtrelenen sonuçlar sırasız olarak döndürülür. Verilerinizin sırası önemliyse, uygulamanızdaki sonuçları Firebase'den döndürüldükten sonra sıralamanız gerekir.

orderBy="$key"

Kullanırken orderBy="$key" verilerinizi sıralamak için parametre, veri aşağıdaki gibi anahtar ile artan düzende döndürülür. Anahtarların yalnızca dize olabileceğini unutmayın.

  1. 32-bit tamsayı olarak ayrıştırılabilen bir anahtarı olan çocuklar, artan düzende sıralanarak önce gelir.
  2. Anahtar olarak dize değerine sahip çocuklar, sözlükbilimsel olarak artan düzende sıralanır.

orderBy="$değer"

Kullanırken orderBy="$value" veri sıralamak için parametreyi, çocukların değeriyle sıralanacaktır. Sıralama ölçütü, belirtilen bir alt anahtarın değeri yerine düğümün değerinin kullanılması dışında, bir alt anahtar tarafından sıralanan verilerle aynıdır.

orderBy="$öncelik"

Kullanırken orderBy="$priority" veri sıralamak için parametreyi aşağıdaki gibi çocukların sipariş onların önceliği ve anahtar ile belirlenir. Öncelik değerlerinin yalnızca sayı veya dize olabileceğini unutmayın.

  1. Önceliği olmayan çocuklar (varsayılan) önce gelir.
  2. Önceliği sayı olan çocuklar daha sonra gelir. Sayısal olarak önceliğe göre küçükten büyüğe sıralanırlar.
  3. Önceliği ip olan çocuklar en son gelir. Önceliğe göre sözlükbilimsel olarak sıralanırlar.
  4. İki çocuk aynı önceliğe sahip olduğunda (öncelik olmaması dahil), anahtara göre sıralanırlar. Sayısal tuşlar önce gelir (sayısal olarak sıralanır), ardından kalan tuşlar gelir (sözlüksel olarak sıralanır).

Öncelikler hakkında daha fazla bilgi için bkz API başvurusu .

REST API'sinden akış

Firebase DİNLENME bitiş noktaları destekleyen EventSource / Sunucunun Gönderdiği Etkinlikler , protokol bizim Firebase veritabanında tek bir konuma akışı değişikliklerine kolay hale getirmektedir.

Akışa başlamak için aşağıdakileri yapmamız gerekecek:

  1. İstemci ayarlayın başlığını Kabul bulunuyor text/event-stream
  2. HTTP Yönlendirmelerine, özellikle HTTP durum kodu 307'ye saygı gösterin
  3. Dahil auth Firebase veritabanı konumu okumak için izin gerektiriyorsa sorgu parametresi

Buna karşılık, sunucu, istenen URL değişikliklerindeki verilerin durumu olarak adlandırılmış olayları gönderir. Bu mesajların yapısı EventSource protokolüne uygundur:

event: event name
data: JSON encoded data payload

Sunucu aşağıdaki olayları gönderebilir:

koymak JSON kodlu veriler iki anahtarlı bir nesne olacaktır: yol ve veri
Yol, istek URL'sine göre bir konumu işaret ediyor
İstemci, önbelleğindeki o konumdaki tüm verileri mesajda verilen verilerle değiştirmelidir.
yama JSON kodlu veriler iki anahtarlı bir nesne olacaktır: yol ve veri
Yol, istek URL'sine göre bir konumu işaret ediyor
Verideki her bir anahtar için, istemci, önbelleğindeki karşılık gelen anahtarı, mesajdaki o anahtarın verileriyle değiştirmelidir.
hayatta kal Bu etkinliğin verileri boş, herhangi bir işlem yapılmasına gerek yok
iptal etmek Bu olay için veriler boş
Bu olay, Firebase Gerçek Zamanlı Veritabanı Kuralları, istenen konumda okumaya artık izin verilmemesine neden olursa gönderilecek
auth_revoked Bu olaya ilişkin veriler, kimlik bilgisinin süresinin dolduğunu gösteren bir dizedir.
Bu olay, sağlanan auth parametresi artık geçerli olmadığında gönderilecek

Aşağıda, sunucunun gönderebileceği bir dizi olay ö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}}

Eğer Git kullanıyorsanız, kontrol Firego Firebase REST ve Akış API'leri etrafında bir üçüncü taraf sarmalayıcı.