Firebase Database REST API'si

API Kullanımı

REST uç noktası olarak herhangi bir Firebase Realtime Database URL'sini kullanabilirsiniz. Yapmanız gerekenler URL'nin sonuna .json ekleyip bir istek göndermek favori HTTPS istemcinizden.

HTTPS gereklidir. Firebase, verilerinizin güvende kalması için yalnızca şifrelenmiş trafiğe yanıt verir.

GET - Verileri Okuma

Realtime Database cihazınızdaki veriler bir HTTP kodu ile okunabilir Bir uç noktaya GET isteği. Aşağıdaki örnek bir kullanıcının bilgilerini nasıl (Realtime Database) içinde depoladığınız ad.

curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'

Başarılı bir istek, 200 OK HTTP ile gösterilir. kullanabilirsiniz. Yanıt, yolunu gösteren GET

{ "first": "Jack", "last": "Sparrow" }

PUT - Veri Yazma

PUT isteğiyle veri yazabilirsiniz.

curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'

Başarılı bir istek, 200 OK HTTP ile gösterilir. kullanabilirsiniz. Yanıt, PUT isteği.

{ "first": "Jack", "last": "Sparrow" }

POST - Veri Aktarma

push() JavaScript'inin eşdeğerini elde etmek için yöntemi (Veri Listeleri'ne bakın), POST isteğinde bulunabilirsiniz.

curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' \
  'https://[PROJECT_ID].firebaseio.com/message_list.json'

Başarılı bir istek, 200 OK HTTP durumuyla gösterilir. girin. Yanıt, yeni verilerin alt adını içerir POST isteğinde belirtilir.

{ "name": "-INOQPH-aV_psbk3ZXEX" }

YAMA - Verileri Güncelleme

Üzerine yazmadan bir konumdaki belirli çocukları güncelleyebilirsiniz. PATCH isteği kullanarak mevcut verileri değiştirebilirsiniz. Şurada adlı çocuklar PATCH ile yazılan verilerin üzerine yazılır, ancak atlanır alt öğeler silinmez. Bu, JavaScript'e eşdeğerdir update() işlevi.

curl -X PATCH -d '{"last":"Jones"}' \
 'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'

Başarılı bir istek, 200 OK HTTP durumuyla gösterilir. girin. Yanıt, PATCH isteği.

{ "last": "Jones" }

SİL - Verileri Kaldırma

DELETE isteğiyle verileri silebilirsiniz:

curl -X DELETE \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'

Başarılı bir DELETE isteği, JSON içeren yanıtı olan 200 OK HTTP durum kodu null.

Yöntemi Geçersiz Kılma

Şunu desteklemeyen bir tarayıcıdan REST çağrısı yaparsanız: yöntemleri kullanarak istek yöntemini geçersiz kılabilir, POST isteği göndermek ve yönteminizi ayarlamak için X-HTTP-Method-Override istek başlığı.

curl -X POST -H "X-HTTP-Method-Override: DELETE" \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'

x-http-method-override sorgu parametresini de kullanabilirsiniz.

curl -X POST \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json?x-http-method-override=DELETE'

Koşullu İstekler

Koşullu istekler, SDK işlem işlemlerinin REST eşdeğeridir. Verileri aşağıdakilere göre günceller: neden olabilir. İş akışına genel bakışı inceleyin ve koşullu istekler hakkında daha fazla bilgi edinin. REST için Verileri Kaydetme bölümüne bakın.

Firebase ETag

Firebase ETag, belirli bir konumdaki mevcut verilerin benzersiz tanımlayıcısıdır. Öğe söz konusu konumda verileri değişirse ETag da değişir. Firebase ETag, başlığı (genellikle bir GET değerine sahiptir, ancak PATCH dışında herhangi bir değer de olabilir).

curl -i 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'

eğer-eşleşme

if-match koşulu, güncellemek istediğiniz verilerin ETag değerini belirtir. Koşulu kullanırsanız Realtime Database, yalnızca yazma isteği, veritabanındaki mevcut verilerin ETag'i ile eşleşir. Getir Firebase ETag isteği olan bir konumda ETag. Herhangi bir konumun üzerine yazmak istiyorsanız null, null_etag kullanın.

curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match: [ETAG_VALUE]'

Beklenen yanıtlar

Aşağıdaki tabloda her istek türü için beklenen yanıtlara genel bir bakış sunulmaktadır: bir ETag eşleşmesine göre eşleştirilir.

İstek Türü "X-Firebase-ETag: true" ETag
ile eşleşiyor if_match: <matching etag>
ETag,
if_match: <no matching etag> ile eşleşmiyor
İNDİRİN Yanıt Durumu/İçeriği 200: "<veri_at_yolu>" 400: "...desteklenmiyor.." 400: "...desteklenmiyor.."
Eklenen Başlıklar ETag: <veri_etiketi> Yok Yok
KUT Yanıt Durumu/İçeriği 200: "<put_data>" 200: "<put_data>" 412: "...ETag uyuşmazlığı.."
Eklenen Başlıklar ETag: <put_data_of_ETag> Yok ETag: <database_ETag>
PAYLAŞIN Yanıt Durumu/İçeriği 200: "<post_data>" 400: "...desteklenmiyor.." 400: "...desteklenmiyor.."
Eklenen Başlıklar ETag: <ETag_of_post_data> Yok Yok
YAMA Yanıt Durumu/İçeriği 400: "...desteklenmiyor.." 400: "...desteklenmiyor.." 400: "...desteklenmiyor.."
Eklenen Başlıklar Yok Yok Yok
SİL Yanıt Durumu/İçeriği 200: null 200: "<data_after_put>" 412: "...ETag uyuşmazlığı.."
Eklenen Başlıklar ETag: <ETag_of_null> Yok ETag: <database_ETag>

Sorgu Parametreleri

Firebase Database REST API aşağıdaki sorgu parametrelerini kabul eder ve değerleri:

access_token

Tüm istek türleri tarafından desteklenir. İzin vermek için bu isteğin kimliğini doğrular Firebase Realtime Database Security Rules tarafından korunan verilere erişim. Bkz. Ayrıntılı bilgi için REST kimlik doğrulama belgelerine göz atın.

curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'

sığ

Bu, büyük boyutlu müşterilerle çalışmanıza yardımcı olmak için tasarlanmış gelişmiş bir özelliktir. veri kümeleri oluşturabilirsiniz. Bunu şuna ayarla: Döndürülen verilerin derinliğini sınırlandırmak için true görebilirsiniz. Konumdaki veriler bir JSON temel öğesiyse (dize, sayı veya boole) değeri döndürülür. Öğe konumdaki veri anlık görüntüsü bir JSON nesnesidir, değerleri true olarak kısaltılır.

Bağımsız değişkenler REST Yöntemleri Açıklama
sığ İNDİR Yanıtın derinliğini sınırlandırın.
curl 'https://[PROJECT_ID].firebaseio/.json?shallow=true'

shallow sorgusunun başka bir sorguyla birlikte kullanılamayacağını unutmayın. parametreleridir.

yazdır

Sunucudan gelen yanıtta döndürülen verileri biçimlendirir.

Bağımsız değişkenler REST Yöntemleri Açıklama
güzel AL, PUT, POST, YAMA, SİL Verileri kullanıcıların okuyabileceği bir biçimde görüntüleyin.
sessiz AL, PUT, YAYINLA, YAMA Veri yazılırken sunucudan gelen çıkışı engellemek için kullanılır. Oluşturulan yanıt boş olur ve 204 No Content HTTP durum kodu.
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=pretty'
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=silent'

geri çağırma

Yalnızca GET tarafından desteklenir. Web tarayıcısından REST aramaları yapmak için yanıtı bir JavaScript ile sarmalamak için JSONP'yi kullanabilirsiniz. geri çağırma işlevinden yararlanırız. REST API sarmalaması için callback= ekleyin geri arama işlevindeki döndürülen verileri içerir.

<script>
  function gotData(data) {
    console.log(data);
  }
</script>
<script src="https://[PROJECT_ID].firebaseio.com/.json?callback=gotData"></script>

format

export değerine ayarlanırsa sunucu, tıklayın.

Bağımsız değişkenler REST Yöntemleri Açıklama
dışa aktar İNDİR Yanıta öncelik bilgisi ekleyin.
curl 'https://[PROJECT_ID].firebaseio.com/.json?format=export'

indirme

Yalnızca GET tarafından desteklenir. Bir dosyayı tetiklemek istiyorsanız verilerinizi bir web tarayıcısından indirmek için download= ekleyin. Bu durum, REST hizmetinin uygun üstbilgileri ekleyerek verileri bir dosyaya kaydedeceğini bilir.

curl 'https://[PROJECT_ID].firebaseio/.json?download=myfilename.txt'

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.

yazmaBoyutSınırlama

'nı inceleyin. Yazmanın boyutunu sınırlamak için writeSizeLimit sorgu parametresini tiny (hedef=1 sn), small (hedef=10 sn), medium (hedef=30 sn), large (hedef=60 sn). Realtime Database, her yazma isteğinin boyutunu tahmin eder ve işlemi iptal eder istek sayısını artırır.

unlimited belirtirseniz, son derece büyük yazma işlemleri (256 MB'a kadar yük ile) izin verilir. Bu nedenle, veritabanı işlenirken sonraki istekler engellenebilir. devam eder. Yazma işlemleri, sunucuya ulaştıktan sonra iptal edilemez.

curl -X DELETE 'https://docs-examples.firebaseio.com/rest/delete-data.json?writeSizeLimit=medium'

Yazma çok büyükse aşağıdaki hata mesajını görürsünüz:

Error: WRITE_TOO_BIG: Data to write exceeds the maximum size that can be modified with a single request.

Ayrıca, tüm veritabanı için defaultWriteSizeLimit değerini ayarlayabilirsiniz örneğine bakalım. Bu sınır, SDK'lardan gelenler de dahil olmak üzere tüm istekler için geçerlidir. defaultWriteSizeLimit, large olarak ayarlandığında yeni veritabanları oluşturulur. Firebase CLI'yı kullanarak defaultWriteSizeLimit yönergesini tiny olarak ayarlayamazsınız.

firebase database:settings:set defaultWriteSizeLimit large

orderBy

Bu kılavuzdaki şu bölüme bakın: sıralanmış veriler konulu videomuzu izleyin.

limitToFirst, limitToLast, startAt, endAt, equalTo

Bu kılavuzdaki şu bölüme bakın: filtreleme daha fazla bilgi edinin.

REST API'den akış

Firebase REST uç noktaları EventSource / Sunucu Tarafından Gönderilen Etkinlikler protokolü. Değişiklikleri Realtime Database içinde tek bir konumda yayınlamak için: yapmanız gereken birkaç şey var:

  • Müşterinin Kabul et başlığını "text/event-stream" olarak ayarlayın
  • HTTP Yönlendirmelerine, özellikle de 307 kodlu HTTP durum koduna uyun
  • Konum, okuma izni gerektiriyorsa auth parametresi

Karşılık olarak sunucu, adlandırılmış etkinlikleri verilerin durumu olarak istenen URL değişir. Bu mesajların yapısı, EventSource protokolü.

event: event name
data: JSON encoded data payload

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

koy

JSON olarak kodlanmış veriler iki anahtara sahip bir nesnedir: path ve veriler. Yol anahtarı bir istek URL'sine göre konumu. İstemci, söz konusu konumdaki verileri verilerle birlikte önbelleğe alır.

patch

JSON olarak kodlanmış veriler iki anahtara sahip bir nesnedir: path ve veriler. Yol anahtarı bir istek URL'sine göre konumu. Her bir anahtar için verilerini kaldırmadan önce, istemci anahtara karşılık gelen anahtara karşılık gelen anahtarı da kullanabilirsiniz.

keep-alive

Bu etkinliğin verileri: null. Bu konuyla ilgili herhangi bir işlem yapmanıza gerek yoktur.

iptal etmek

Beklenmedik bazı hatalar, "cancel" etkinliği gönderip bağlantıyı sonlandırabilir. Sorunun nedeni, bu etkinlik için sağlanan verilerde açıklanmaktadır. Bazı olası nedenler şunlardır: şöyle olur: 1. Firebase Realtime Database Security Rules, istenen konumda okuma işlemine artık izin vermiyor. İlgili içeriği oluşturmak için kullanılan Bu neden için "veriler" açıklaması "İzin reddedildi" şeklindedir. 2. Bir yazma işlemi, sınırımızı aşan büyük bir JSON ağacı gönderen bir etkinlik akışını tetikledi. 512MB. Bu neden için "data" (veriler), "Belirtilen yük çok büyük. Lütfen bir daha az veriyle işlem yapabilirsiniz."

kimlik doğrulama iptal edildi

Bu etkinlikle ilgili veriler, kimlik bilgilerinin süresi doldu. Bu etkinlik, sağlanan auth parametresi artık geçerli değil.

Sunucunun gönderebileceği bir etkinlik grubu örneği aşağıda 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}}

Öncelikler

Bir konuma ilişkin öncelik bilgileri bir "sanal çocuk" .priority olarak adlandırıldı. Öncelikleri GET istekleri ve bunları PUT istekleriyle yazma. Örneğin, aşağıdaki istek users/tom düğüm:

curl 'https://[PROJECT_ID].firebaseio/users/tom/.priority.json'

Öncelik ve verileri aynı anda yazmak için JSON yüküne .priority alt öğe:

curl -X PUT -d '{"name": {"first": "Tom"}, ".priority": 1.0}' \
  'https://[PROJECT_ID].firebaseio/users/tom.json'

Aynı anda hem öncelik hem de temel değer (ör. dize) yazmak için bir .priority alt öğesi ekleyip temel değeri girebilirsiniz .value çocukta:

curl -X PUT -d '{".value": "Tom", ".priority": 1.0}' \
  'https://[PROJECT_ID].firebaseio/users/tom/name/first.json'

Bu, 1.0 önceliğiyle "Tom" yazar. Öncelikler, JSON yüküne herhangi bir derinlikte dahil edilebilir.

Sunucu Değerleri

Belirli bir konumdaki sunucu değerlerini, her bir konum için tek .sv anahtarına sahip bir nesnedir. Bu anahtarın değeri sunucu değerinin türünü belirtmelisiniz. Örneğin, isteği, düğümün değerini Firebase sunucusunun mevcut zaman damgası:

curl -X PUT -d '{".sv": "timestamp"}' \
  'https://[PROJECT_ID].firebaseio/users/tom/startedAtTime.json'

Ayrıca, öncelikleri sunucu değerlerini kullanarak, "sanal çocuk" belirtilen yolu izleyin.

Desteklenen sunucu değerleri şunlardır:

Sunucu Değeri
zaman damgası UNIX döneminden beri geçen süre (milisaniye cinsinden).
artım Şu biçimde bir tam sayı veya kayan nokta delta değeri sağlayın: Atomsal olarak { ".sv": {"increment": <delta_value> }} mevcut veritabanı değerini artırır. Veri henüz yoksa güncelleme, delta değerine kullanır. Delta değerlerinden veya mevcut verilerden biri kayan özellikteyse her iki değer de kayan nokta sayıları olarak yorumlanır ve uç noktanın üzerine arka ucunu çift değer olarak kullanabilirsiniz. Çift aritmetik ve çift değerlerin gösterimi IEEE 754 anlamı. Pozitif/negatif tam sayı taşması varsa toplam şu şekilde hesaplanır: olarak düşünebilirsiniz.

Firebase Realtime Database Security Rules Alınıyor ve Güncelleniyor

REST API, verileri almak ve güncellemek için de Şunun için Firebase Realtime Database Security Rules: . Firebase projenizin sırrına ihtiyacınız olacaktır. proje yaşam döngüsünü Firebase projenizin Hizmet Hesapları ayarını değiştirebilirsiniz.

curl 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET'
curl -X PUT -d '{ "rules": { ".read": true } }' 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET'

İsteklerin kimliğini doğrulama

Varsayılan olarak REST istekleri, kimlik doğrulama olmadan yürütülür ve yalnızca Realtime Database Kuralları şunlara herkese açık okuma veya yazma erişimine izin verir: bahsedeceğim. İsteğinizin kimliğini doğrulamak için access_token= veya auth= sorgu parametresi.

REST API ile kimlik doğrulama hakkında daha fazla bilgi edinmek için şu sayfayı ziyaret edin: REST İsteklerinin kimliğini doğrulayın.

Hata Koşulları

Firebase Database REST API aşağıdaki hata kodlarını döndürebilir.

HTTP Durum Kodları
400 Hatalı İstek

Aşağıdaki hata koşullarından biri:

  • PUT veya POST verileri ayrıştırılamıyor.
  • PUT veya POST verileri eksik.
  • İstek, PUT veya POST verilerini işlemeye çalışıyor çok büyük olabilir.
  • REST API çağrısı, yolun bir parçası olarak geçersiz alt adlar içeriyor.
  • REST API çağrısı yolu çok uzun.
  • İstek, tanınmayan bir sunucu değeri içeriyor.
  • Sorguya ilişkin dizin Firebase Realtime Database Security Rules.
  • İstek, belirtilen sorgu parametrelerinden birini desteklemiyor.
  • İstek, sorgu parametrelerini yüzeysel bir GET isteğiyle karıştırıyor.
401 Yetkisiz

Aşağıdaki hata koşullarından biri:

404 Bulunamadı Belirtilen Realtime Database bulunamadı.
500 Dahili Sunucu Hatası Sunucu bir hata döndürdü. Daha fazla bilgi için hata mesajına bakın bolca fırsat sunuyor.
503 Hizmet Kullanılamıyor Belirtilen Firebase Realtime Database geçici olarak kullanılamıyor. Bu, isteğin denenmediği anlamına gelir.
412 Ön Koşul Başarısız Oldu İsteğin if-match başlığında belirtilen ETag değeri, sunucunun değeriyle eşleşmedi.