Veri kaydetmenin yolları | |
---|---|
KOYMAK | fireblog/users/user1/<data> gibi tanımlanmış bir yola verileri yazın veya değiştirin. |
YAMA | Tüm verileri değiştirmeden tanımlanmış bir yol için bazı anahtarları güncelleyin. |
POSTALAMAK | Firebase veritabanımızdaki veri listesine ekleyin . Bir POST isteği her gönderdiğimizde, Firebase istemcisi fireblog/users/<unique-id>/<data> gibi benzersiz bir anahtar oluşturur. |
SİLMEK | Belirtilen Firebase veritabanı referansından verileri kaldırın. |
Put ile veri yazmak
PUT
API aracılığıyla temel yazma işlemi konur. Kaydetme verilerini göstermek için yayınlar ve kullanıcılarla bir blog uygulaması oluşturacağız. Uygulamamız için tüm veriler, firebase veritabanı url `https: // docs-examples.firebaseio.com/fireblog '' da` fireblog 'yolunda saklanacaktır.
Firebase veritabanımıza bazı kullanıcı verilerini kaydederek başlayalım. Her kullanıcıyı benzersiz bir kullanıcı adıyla saklayacağız ve ayrıca tam adlarını ve doğum tarihlerini de saklayacağız. Her kullanıcının benzersiz bir kullanıcı adına sahip olacağından, zaten anahtarımız var ve bir tane oluşturmamız gerekmediğinden, POST
yerine burada PUT
mantıklıdır.
PUT
kullanarak Firebase veritabanımıza bir dize, sayı, boolean, dizi veya herhangi bir JSON nesnesi yazabiliriz. Bu durumda buna bir nesne geçireceğiz:
curl -X PUT -d '{ "alanisawesome": { "name": "Alan Turing", "birthday": "June 23, 1912" } }' 'https://docs-examples.firebaseio.com/fireblog/users.json'
Bir JSON nesnesi veritabanına kaydedildiğinde, nesne özellikleri otomatik olarak çocuk konumlarıyla iç içe geçmiş bir şekilde eşlenir. Yeni oluşturulan düğüme gidersek, "Alan Turing" değerini göreceğiz. Ayrıca verileri doğrudan bir çocuk konumuna kaydedebiliriz:
curl -X PUT -d '"Alan Turing"' \ 'https://docs-examples.firebaseio.com/fireblog/users/alanisawesome/name.json'
curl -X PUT -d '"June 23, 1912"' \ 'https://docs-examples.firebaseio.com/fireblog/users/alanisawesome/birthday.json'
Yukarıdaki iki örnek - değeri bir nesne ile aynı zamanda yazmak ve bunları çocuk konumlarına ayrı ayrı yazmak - aynı verilerin Firbase veritabanımıza kaydedilmesine neden olacaktır:
{ "users": { "alanisawesome": { "date_of_birth": "June 23, 1912", "full_name": "Alan Turing" } } }
Başarılı bir talep 200 OK
HTTP durum kodu ile belirtilecek ve yanıt veritabanına yazdığımız verileri içerecektir. İlk örnek, verileri izleyen istemciler üzerinde yalnızca bir olayı tetiklerken, ikinci örnek ikisini tetikleyecektir. Kullanıcı yolunda zaten veriler varsa, ilk yaklaşımın üzerine yazacağını belirtmek önemlidir, ancak ikinci yöntemin yalnızca diğer çocukları değişmeden bırakırken her ayrı çocuk düğümünün değerini değiştireceğini belirtmektedir. PUT
, JavaScript SDK'mızda set()
e eşdeğerdir.
Verilerin yama ile güncellenmesi
Bir PATCH
isteği kullanarak, mevcut verilerin üzerine yazmadan belirli çocukları bir yerde güncelleyebiliriz. Turing'in takma adını bir PATCH
isteği ile kullanıcı verilerine ekleyelim:
curl -X PATCH -d '{ "nickname": "Alan The Machine" }' \ 'https://docs-examples.firebaseio.com/fireblog/users/alanisawesome.json'
Yukarıdaki istek, alanisawesome
nesnemize name
veya birthday
çocuklarını silmeden nickname
yazacaktır. Bunun yerine burada bir PUT
vermiş olsaydık, isteğe dahil olmadıkları için name
ve birthday
silineceğini unutmayın. Firebase veritabanımızdaki veriler şimdi şöyle görünüyor:
{ "users": { "alanisawesome": { "date_of_birth": "June 23, 1912", "full_name": "Alan Turing", "nickname": "Alan The Machine" } } }
Başarılı bir talep 200 OK
HTTP durum kodu ile belirtilecek ve yanıt veritabanına yazılan güncellenmiş verileri içerecektir.
Firebase ayrıca çok yollu güncellemeleri de destekler. Bu, PATCH
artık Firebase veritabanınızdaki birden fazla konumda değerleri güncelleyebileceği anlamına gelir, bu da verilerinizi denormelerine yardımcı olan güçlü bir özellik. Çok yollu güncellemeleri kullanarak, Alan ve Grace'e aynı anda takma adlar ekleyebiliriz:
curl -X PATCH -d '{ "alanisawesome/nickname": "Alan The Machine", "gracehopper/nickname": "Amazing Grace" }' \ 'https://docs-examples.firebaseio.com/fireblog/users.json'
Bu güncellemeden sonra, hem Alan hem de Grace takma adları ekledi:
{ "users": { "alanisawesome": { "date_of_birth": "June 23, 1912", "full_name": "Alan Turing", "nickname": "Alan The Machine" }, "gracehop": { "date_of_birth": "December 9, 1906", "full_name": "Grace Hopper", "nickname": "Amazing Grace" } } }
Dahil edilen yollarla nesneler yazarak nesneleri güncellemeye çalışmanın farklı davranışlarla sonuçlanacağını unutmayın. Grace ve Alan'ı bu şekilde güncellemeye çalışırsak ne olacağına bir göz atalım:
curl -X PATCH -d '{ "alanisawesome": {"nickname": "Alan The Machine"}, "gracehopper": {"nickname": "Amazing Grace"} }' \ 'https://docs-examples.firebaseio.com/fireblog/users.json'
Bu, farklı davranışlarla sonuçlanır, yani tüm /fireblog/users
düğümünün üzerine yazılır:
{ "users": { "alanisawesome": { "nickname": "Alan The Machine" }, "gracehop": { "nickname": "Amazing Grace" } } }
Verilerin koşullu isteklerle güncellenmesi
Verileri mevcut durumuna göre güncellemek için işlemlere eşdeğer olan koşullu istekleri kullanabilirsiniz. Örneğin, bir upvote sayacını artırmak istiyorsanız ve sayının birden fazla, eşzamanlı upvotları doğru bir şekilde yansıttığından emin olmak istiyorsanız, yeni değeri sayaç yazmak için koşullu bir istek kullanın. Sayacı aynı sayıya dönüştüren iki yazma yerine, yazma isteklerinden biri başarısız olur ve daha sonra isteği yeni değerle yeniden deneyebilirsiniz.- Bir konumda koşullu bir istek yapmak için, o konumdaki geçerli veriler veya ETAG için benzersiz tanımlayıcısı alın. Veri bu konumda değişirse, ETAG da değişir.
PATCH
dışında herhangi bir yöntem içeren bir ETAG isteyebilirsiniz. Aşağıdaki örnek birGET
isteği kullanır.curl -i 'https://test.example.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
Özellikle başlıktaki ETAG'yi çağırmak HTTP yanıtında belirtilen konumun ETAG'sini döndürür.HTTP/1.1 200 OK Content-Length: 6 Content-Type: application/json; charset=utf-8 Access-Control-Allow-Origin: * ETag: [ETAG_VALUE] Cache-Control: no-cache 10 // Current value of the data at the specified location
- ETAG değerine özel olarak eşleşen verileri güncellemek için döndürülen ETAG'ı bir sonraki
PUT
veyaDELETE
isteğinize ekleyin. Örneğimizden sonra, sayaç 11 veya ilk getirilen değerinden 1 daha büyük 1'e güncellemek için ve değer artık eşleşmezse, aşağıdaki kodu kullanın:curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match:[ETAG_VALUE]'
Belirtilen verilerin değeri ise, Konum hala 10'dur,PUT
İstek eşleşmesindeki ETAG ve veritabanına 11 yazarak istek başarılı olur.HTTP/1.1 200 OK Content-Length: 6 Content-Type: application/json; charset=utf-8 Access-Control-Allow-Origin: * Cache-Control: no-cache 11 // New value of the data at the specified location, written by the conditional request
Konum artık ETAG ile eşleşmezse, başka bir kullanıcı veritabanına yeni bir değer yazdıysa, istek konuma yazmadan başarısız olur. Dönüş yanıtı yeni değer ve ETAG içerir.HTTP/1.1 412 Precondition Failed Content-Length: 6 Content-Type: application/json; charset=utf-8 Access-Control-Allow-Origin: * ETag: [ETAG_VALUE] Cache-Control: no-cache 12 // New value of the data at the specified location
- İsteği yeniden denemeye karar verirseniz yeni bilgileri kullanın. RealTime Veritabanı, başarısız olan koşullu istekleri otomatik olarak yeniden denemez. Ancak, başarısız yanıtı tarafından döndürülen bilgilerle yeni bir koşullu istek oluşturmak için yeni değer ve ETAG'ı kullanabilirsiniz.
Dinlenme tabanlı koşullu istekler HTTP IF-Match standardını uygular. Ancak, aşağıdaki yollarla standarttan farklıdırlar:
- Her bir IF-eşleşme isteği için yalnızca bir ETAG değeri sağlayabilirsiniz, birden fazla değil.
- Standart, ETAG'ların tüm isteklerle döndürülmesini önerirken, gerçek zamanlı veritabanı yalnızca
X-Firebase-ETag
üstbilgisi dahil olmak üzere ETAG'ları döndürür. Bu, standart istekler için faturalandırma maliyetlerini azaltır.
Koşullu talepler de tipik dinlenme isteklerinden daha yavaş olabilir.
Veri listelerini kaydetme
Firebase veritabanı referansına eklenen her çocuk için benzersiz, zaman damgası tabanlı bir anahtar oluşturmak için bir POST
isteği gönderebiliriz. users
için, her kullanıcının benzersiz bir kullanıcı adı olduğu için kendi anahtarlarımızı tanımlamak mantıklı geldi. Ancak kullanıcılar uygulamaya blog yayınları eklediğinde, her blog yazısı için bir anahtarı otomatik olarak oluşturmak için bir POST
isteği kullanacağız:
curl -X POST -d '{ "author": "alanisawesome", "title": "The Turing Machine" }' 'https://docs-examples.firebaseio.com/fireblog/posts.json'
posts
artık aşağıdaki verilere sahiptir:
{ "posts": { "-JSOpn9ZC54A4P4RoqVa": { "author": "alanisawesome", "title": "The Turing Machine" } } }
Bir POST
isteği kullandığımız için bizim için -JSOpn9ZC54A4P4RoqVa
anahtarının otomatik olarak oluşturulduğuna dikkat edin. Başarılı bir talep 200 OK
HTTP durum kodu ile belirtilecek ve yanıt eklenen yeni verilerin anahtarını içerecektir:
{"name":"-JSOpn9ZC54A4P4RoqVa"}
Verileri Kaldırma
Veritabanından verileri kaldırmak için, verileri silmek istediğimiz yolun URL'siyle bir DELETE
isteği gönderebiliriz. Aşağıdakiler Alan'ı users
siler:
curl -X DELETE \ 'https://docs-examples.firebaseio.com/fireblog/users/alanisawesome.json'
Başarılı bir DELETE
talebi, JSON null
içeren bir yanıtla 200 OK
HTTP durum kodu ile belirtilecektir.
URI Parametreleri
Geri kalan API, veritabanına veri yazarken aşağıdaki URI parametrelerini kabul eder:
yetki
auth
Talep parametresi, Firebase RealTime Veritabanı Güvenlik Kuralları tarafından korunan verilere erişim sağlar ve tüm istek türleri tarafından desteklenir. Argüman, Firebase App Secret'ımız veya kullanıcı yetkilendirme bölümünde ele alacağımız bir kimlik doğrulama jetonu olabilir. Aşağıdaki örnekte, CREDENTIAL
Firebase App Secret'ımız veya kimlik doğrulama jetonumuz olan bir auth
parametresi ile bir POST
isteği gönderiyoruz:
curl -X POST -d '{"Authenticated POST request"}' \ 'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'
Yazdır
print
parametresi, veritabanından yanıtımızın biçimini belirtmemizi sağlar. print=pretty
ekleme talebimize verileri insan tarafından okunabilir bir formatta döndürür. print=pretty
GET
, PUT
, POST
, PATCH
ve DELETE
İstekleri ile desteklenir.
Veri yazarken sunucudan çıktıyı bastırmak için, isteğimize print=silent
ekleyebiliriz. Ortaya çıkan yanıt boş olacak ve istek başarılı olursa 204 No Content
HTTP durum kodu ile gösterilecektir. print=silent
GET
, PUT
, POST
ve PATCH
İstekleri tarafından desteklenir.
Sunucu Değerleri Yazma
Sunucu değerleri, tek bir ".sv"
tuşuna sahip bir nesne olan bir yer tutucu değeri kullanılarak bir yerde yazılabilir. Bu anahtarın değeri, ayarlamak istediğimiz sunucu değeri türüdür. Örneğin, bir kullanıcı oluşturulduğunda bir zaman damgası ayarlamak için aşağıdakileri yapabiliriz:
curl -X PUT -d '{".sv": "timestamp"}' \ 'https://docs-examples.firebaseio.com/alanisawesome/createdAt.json'
"timestamp"
desteklenen tek sunucu değeridir ve UNIX döneminden bu yana milisaniye cinsinden zamandır.
Yazma Performansını İyileştirme
Veritabanına büyük miktarda veri yazıyorsanız, yazma performansımızı artırmak ve bant genişliği kullanımını azaltmak için print=silent
parametresini kullanabiliriz. Normal yazma davranışında, sunucu yazılan JSON verileri ile yanıt verir. print=silent
belirtildiğinde, veri alındıktan sonra sunucu hemen bağlantıyı kapatır ve bant genişliği kullanımını azaltır.
Veritabanına birçok istekte bulunduğumuz durumlarda, HTTP başlığında bir Keep-Alive
isteği göndererek HTTPS bağlantısını yeniden kullanabiliriz.
Hata Koşulları
Geri kalan API bu koşullar altında hata kodlarını döndürür:
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 Firebase veritabanı bulunamadı. |
500 Dahili Sunucu Hatası | Sunucu bir hata döndürdü. Daha fazla bilgi için hata mesajına bakın. |
503 Hizmet Kullanılamıyor | Belirtilen Firebase RealTime veritabanı geçici olarak kullanılamıyor, bu da talebin denenmediği anlamına geliyor. |
Verilerin Güvenliğini Sağlama
Firebase, hangi kullanıcıların verilerimizin farklı düğümlerine erişimi okuduğunu ve yazdıklarını tanımlamamızı sağlayan bir güvenlik dili vardır. Bunun hakkında daha fazla bilgi için gerçek zamanlı veritabanı güvenlik kurallarında okuyabilirsiniz.
Artık tasarruf verilerini kapsadığımıza göre, bir sonraki bölümdeki diğer API aracılığıyla verilerimizi Firebase veritabanından nasıl alacağımızı öğrenebiliriz.