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 Güvenlik Kuralları 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 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. 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ı eklemeyi planlıyoruz. Ö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. 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.
  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" 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.

  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 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.

  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. 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:

  1. Müşterinin Kabul et başlığını text/event-stream olarak ayarlayın
  2. HTTP Yönlendirmelerine, özellikle de 307 kodlu HTTP durum koduna uyun
  3. Firebase veritabanı konumuauth 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 Güvenlik Kuralları, 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