Verileri Kaydetme

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.
  1. 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 bir GET isteği kullanılmaktadır.
    curl -i 'https://test.example.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
    
    Özellikle başlıkta ETag'in çağrılması, belirtilen konumu kullanabilirsiniz.
    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
    
  2. Döndürülen ETag'i sonraki PUT veya DELETE 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:
    curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match:[ETAG_VALUE]'
    
    Belirtilen konumdaki verilerin değeri hâlâ 10 ise PUT isteği eşleşir ve istek başarılı olur, veritabanına 11 tane yazılır.
    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ş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 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
    
  3. İ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:

  • PUT veya POST verileri ayrıştırılamıyor.
  • PUT veya POST verileri eksik.
  • İstek, şu özelliklere sahip PUT veya POST verilerini işlemeye çalışıyor: çok büyük.
  • 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 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.