Veri Kaydetme Yöntemleri |
|
---|---|
PUT | Verileri fireblog/users/user1/<data> gibi tanımlı bir yola yazın veya değiştirin |
YAMA | Tüm verileri değiştirmeden, tanımlanmış bir yolun bazı anahtarlarını güncelleyin. |
POST | Firebase veritabanımızdaki veri listesine ekleme. Her POST isteği gönderdiğimizde Firebase istemcisi fireblog/users/<unique-id>/<data> gibi benzersiz bir anahtar oluşturur |
SİL | Belirtilen Firebase veritabanı referansındaki verileri kaldırın. |
PUT ile Veri Yazma
REST API üzerinden temel yazma işlemi PUT
şeklindedir. Alıcı:
nasıl kaydedeceğimizi gösterdikten sonra, yayınlar ve kullanıcılar içeren bir blog uygulaması geliştireceğiz. Tüm
uygulamamızın verileri, Firebase veritabanı URL'sindeki "fireblog" yolunda depolanır
"https://docs-examples.firebaseio.com/fireblog".
Firebase veritabanımıza bazı kullanıcı verilerini kaydederek başlayalım. Her kullanıcıyı benzersiz bir
kullanıcı adınızı, tam adlarını ve doğum tarihlerini de saklarız. Her kullanıcının bir
benzersiz kullanıcı adı olduğundan burada POST
yerine PUT
kullanılması daha mantıklıdır
anahtar zaten var ve oluşturmamız gerekmiyor.
PUT
işlevini kullanarak bir dize, sayı, boole, dizi veya herhangi bir JSON nesnesini
eklememiz gerekir. Bu örnekte, öğeye bir nesne ileteceğ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 alt konumlarla iç içe yerleştirilmiş bir şekilde otomatik olarak eşlenir. Bir ara hedefe yeni oluşturulan düğümde "Alan Turing" değerini göreceğiz. Ayrıca verileri doğrudan bir alt konum:
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 nesneyle aynı anda yazıp yazma alt konumlara ayrı olarak ekleyebilirsiniz. Bu durumda, aynı veriler Firebase'e kaydedilir. veritabanı:
{ "users": { "alanisawesome": { "date_of_birth": "June 23, 1912", "full_name": "Alan Turing" } } }
Başarılı bir istek, 200 OK
HTTP durum kodu ile gösterilir ve
yanıtı, veritabanına yazdığımız verileri içerecek. İlk örnekte yalnızca
Verileri izleyen müşteriler için bir etkinliği tetiklerken ikinci örnek
iki. Kullanıcı yolunda zaten veri varsa ilk yaklaşımın
bunun üzerine yazar, ancak ikinci yöntem yalnızca her bir alt öğenin değerini
diğer alt öğeleri değiştirmeden bırakır. PUT
eşdeğerdir
JavaScript SDK'mizdeki set()
.
Verileri YAMA ile Güncelleme
PATCH
isteği ile herhangi bir konumdaki belirli çocuklar için güncelleme yapabiliriz.
mevcut verilerin üzerine yazmaktır. Turing'in takma adını kullanıcı verilerine PATCH
ile ekleyelim
istek:
curl -X PATCH -d '{ "nickname": "Alan The Machine" }' \ 'https://docs-examples.firebaseio.com/fireblog/users/alanisawesome.json'
Yukarıdaki istek alanisawesome
nesnemize nickname
yazacak
name
veya birthday
alt öğelerini silmeden silin. Eğer
bunun yerine burada bir PUT
isteği gönderdi, name
ve birthday
talebe dahil edilmediği için silinmiş olacaktı. Firebase'deki veriler
aşağıdaki gibi görünür:
{ "users": { "alanisawesome": { "date_of_birth": "June 23, 1912", "full_name": "Alan Turing", "nickname": "Alan The Machine" } } }
Başarılı bir istek, 200 OK
HTTP durum kodu ile gösterilir ve
yanıt, veritabanına yazılan güncellenmiş verileri içerecektir.
Firebase, çok yollu güncellemeleri de destekler. Bu sayede, PATCH
artık Firebase veritabanınızdaki birden fazla konumdaki değerleri aynı anda güncelleyebilir. Bu güçlü özellik,
verilerinizi normal dışı bırakabilirsiniz. Çok yollu güncellemeleri kullanarak hem Ahmet hem de Gözde'ye 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 Ahmet hem de Gözde'nin takma adları eklendi:
{ "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" } } }
Yolları içeren nesneleri yazarak nesneleri güncellemeye çalışmanın farklı davranışlara yol açacağını unutmayın. Bunun yerine, Gözde ve Alan'ı şu şekilde güncellemeye çalışırsak neler olacağına bir bakalım:
curl -X PATCH -d '{ "alanisawesome": {"nickname": "Alan The Machine"}, "gracehopper": {"nickname": "Amazing Grace"} }' \ 'https://docs-examples.firebaseio.com/fireblog/users.json'
Bu, farklı bir davranışa neden olur ve /fireblog/users
düğümünün tamamının üzerine yazılır.
{ "users": { "alanisawesome": { "nickname": "Alan The Machine" }, "gracehop": { "nickname": "Amazing Grace" } } }
Koşullu İstekler İçeren Verileri Güncelleme
Güncelleme yapmak için işlemlerin eşdeğeri olan REST'teki koşullu istekleri kullanabilirsiniz. verilerini mevcut durumuna göre düzenler. Örneğin, Örneğin, olumlu oy sayacını artırmak ve sayısı birden fazla, eş zamanlı olumlu oyu doğru yansıtan, koşullu bir yeni değeri sayaca yazma isteği gönderin. İki yazma yerine sayacı aynı sayıyla değiştirdiğinde, yazma isteklerinden biri başarısız olur ve isteği yeni değerle tekrar deneyebilirsiniz.- Bir konumda koşullu istek gerçekleştirmek için benzersiz tanımlayıcıyı alın
ETag'e yönlendirmenize olanak tanır. Veriler
ETag'in de değişmesi gerekir. Herhangi bir
PATCH
dışında bir yöntem kullanabilirsiniz. Aşağıdaki örnekte birGET
isteği kullanılmaktadır. Özellikle başlıkta ETag'in çağrılması, belirtilen konumu kullanabilirsiniz.curl -i 'https://test.example.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
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
- Döndürülen ETag'i sonraki
PUT
veyaDELETE
sayfanıza ekleyin güncelleme isteği gönder ETag değeriyle tam olarak eşleşen veriler bulunur. Örneğimize dönecek olursak sayacı 11 veya ilk getirilen değer olan 10'dan 1 daha büyük olacak şekilde güncelleyin. ve değer artık eşleşmiyorsa istek başarısız olursa aşağıdaki kodu kullanın: Belirtilen konumdaki verilerin değeri hâlâ 10 isecurl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match:[ETAG_VALUE]'
PUT
isteği eşleşir ve istek başarılı olur, veritabanına 11 tane yazılır. Konum artık ETag ile eşleşmiyorsa (bu durum, başka bir kullanıcının isteği veritabanına yeni bir değer yazdığında, istek konum. Döndürülen yanıt yeni değeri ve ETag'i içerir.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
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 Database. başarısız olan koşullu istekleri otomatik olarak yeniden denemez. Ancak, yeni değeri ve ETag'i kullanarak yeni bir koşullu istek söz konusu hata yanıtının döndürdüğü bilgileri içerir.
REST tabanlı koşullu istekler HTTP'yi uygular if-match standart. Bununla birlikte, standartlardan şu yönleriyle farklıdırlar:
- Her if-match isteği için birden fazla değil, yalnızca bir ETag değeri sağlayabilirsiniz.
- Standart, ETag'lerin tüm isteklerle döndürüleceğini önerse de
Realtime Database, yalnızca
X-Firebase-ETag
üstbilgisi. Bu, standart isteklerin faturalandırma maliyetlerini azaltır.
Koşullu istekler tipik REST isteklerinden daha yavaş da olabilir.
Veri Listelerini Kaydetme
Firebase veritabanı referansına eklenen her alt öğe için benzersiz, zaman damgası tabanlı bir anahtar oluşturmak amacıyla
POST
isteği gönderebiliriz. users
rotamızda,
her kullanıcının benzersiz bir kullanıcı adı olduğundan kendi anahtarlarımızı tanımlayabiliriz. Ancak kullanıcılar,
uygulamasında her blog yayını için otomatik olarak anahtar oluşturmak üzere 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
yolumuzda artık aşağıdaki veriler bulunuyor:
{ "posts": { "-JSOpn9ZC54A4P4RoqVa": { "author": "alanisawesome", "title": "The Turing Machine" } } }
-JSOpn9ZC54A4P4RoqVa
anahtarının bizim için otomatik olarak oluşturulduğunu unutmayın.
POST
isteği kullandık. Başarılı bir istek, 200 OK
ile gösterilir.
HTTP durum kodudur ve yanıt, eklenen yeni verilerin anahtarını içerir:
{"name":"-JSOpn9ZC54A4P4RoqVa"}
Verileri Kaldırma
Verileri veritabanından kaldırmak için DELETE
isteği gönderebiliriz.
Verileri silmek istediğimiz yolun URL'si. Aşağıdakiler, Alan'ı
users
yol:
curl -X DELETE \ 'https://docs-examples.firebaseio.com/fireblog/users/alanisawesome.json'
Başarılı bir DELETE
isteği, JSON null
içeren bir yanıt içeren 200 OK
HTTP durum koduyla gösterilir.
URI Parametreleri
REST API, veritabanına veri yazarken aşağıdaki URI parametrelerini kabul eder:
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 uygulamamızın gizli anahtarı veya
kullanıcı yetkilendirme işleminde ele alacağımız kimlik doğrulama jetonuyla
bölümünü inceleyin. Aşağıdaki örnekte,POST
auth
parametresi; burada CREDENTIAL
, Firebase uygulama gizli anahtarımız veya
kimlik doğrulama jetonudur:
curl -X POST -d '{"Authenticated POST request"}' \ 'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'
yazdır
print
parametresi,
İsteğimize print=pretty
eklendiğinde veriler
biçimi de vardır. print=pretty
, GET
tarafından destekleniyor,
PUT
, POST
, PATCH
ve DELETE
istekleri.
Veri yazarken sunucudan gelen çıkışı engellemek için
print=silent
olarak değiştirdik. Oluşturulan yanıt boş olur ve
istek başarılı olursa bir 204 No Content
HTTP durum kodu.
print=silent
; GET
, PUT
,
POST
ve PATCH
istekleri.
Sunucu Değerleri Yazma
Sunucu değerleri, konuma sahip bir nesne olan yer tutucu değer kullanılarak
tek ".sv"
tuşu. Bu anahtarın değeri, ayarlamak istediğimiz sunucu değerinin türüdür.
Örneğin, bir kullanıcı oluşturulduğunda 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'ten bu yana geçen süredir
epoch (sıfır zaman) olarak ayarlanır.
Yazma Performansını Geliştirme
Veritabanına büyük miktarda veri yazıyorsak
Yazma performansımızı iyileştirmek ve bant genişliğini azaltmak için print=silent
parametresi
bazı yolları da görmüştük. Normal yazma davranışında, sunucu yazılan JSON verileriyle yanıt verir.
print=silent
belirtildiğinde sunucu hemen
, veriler alındıktan sonra bağlantıyı kapatarak bant genişliği kullanımını azaltır.
Veritabanına çok sayıda istek ilettiğimizde, HTTPS'yi yeniden kullanabiliriz.
Keep-Alive
isteği göndererek HTTP üstbilgisinde bağlantı oluşturmayı da gerektirir.
Hata Koşulları
REST API, şu durumlarda 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 ayrıntılı bilgi için hata mesajına bakın. |
503 Hizmet Kullanılamıyor | Belirtilen Firebase Realtime Database geçici olarak kullanılamıyor. Bu durum, isteği başarısız oldu. |
Verilerin Güvenliğini Sağlama
Firebase'in, hangi kullanıcıların okuma ve yazma erişimine sahip olacağını tanımlamamızı sağlayan bir güvenlik dili vardır düğüm oluşturmak için kullanabilirsiniz. Bu konuda daha fazla bilgiyi şurada bulabilirsiniz: Realtime Database Security Rules.
Veri tasarrufunu incelediğimize göre artık verilerimizi Firebase'den nasıl veritabanını REST API üzerinden sunacağız.