Veri Alma

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:

  1. Belirtilen alt anahtarda null değerine sahip olan alt öğeler önce gelir.
  2. Belirtilen alt anahtar için false değerine sahip olan alt öğeler ardından gelir. Eğer birden çok alt öğe false değerine sahipse bunlar sıralanır Anahtara göre sözlüksel olarak:
  3. Belirtilen alt anahtar için true değerine sahip olan alt öğeler ardından gelir. Eğer birden çok alt öğe true değerine sahipse bu öğeler sözlüksel olarak şuna göre sıralanır: tuşuna basın.
  4. 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.
  5. 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.
  6. Nesneler en sonda yer alır ve sözlüklere göre anahtara göre artan düzende sıralanır.
Filtrelenen sonuçlar sırasız olarak döndürülür. Verilerinizin sırası önemliyse Firebase'den döndürüldükten sonra uygulamanızdaki sonuçları sıralamanız gerekir.

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.

  1. 32 bit tam sayı olarak ayrıştırılabilen bir anahtarı olan alt öğeler önce gelir ve artan düzende sıralanır sipariş.
  2. 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.

  1. Önceliği olmayan çocuklar (varsayılan) önce gelir.
  2. Önceliği telefon numarası olan çocuklar gelir. Önceliğe göre sayısal olarak sıralanırlar küçükten büyüğe.
  3. Önceliği dize olan alt öğeler en sondadır. Bu terimler sözlüksel olarak öncelik sırasına koyabilirsiniz.
  4. İ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:

  1. İstemcinin Accept üstbilgisini text/event-stream olarak ayarlayın
  2. HTTP Yönlendirmelerine, özellikle de 307 kodlu HTTP durum koduna uyun
  3. 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