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