Catch up on everthing we announced at this year's Firebase Summit. Learn more

Veri Kaydetme

Veri Kaydetmenin Yolları

KOYMAK Yaz ya da benzeri bir tanımlanmış yola verilerin yerini fireblog/users/user1/<data>
YAMA Tüm verileri değiştirmeden tanımlı bir yol için bazı anahtarları güncelleyin.
İLETİ Bizim Firebase veritabanındaki verilerin bir listeye ekleyin. Biz göndermek her zaman POST isteğini Firebase istemci gibi benzersiz bir anahtar oluşturur fireblog/users/<unique-id>/<data>
SİLMEK Belirtilen Firebase veritabanı referansından verileri kaldırın.

PUT ile Veri Yazma

REST API yoluyla temel yazma işlemi olduğunu PUT . Veri kaydetmeyi göstermek için gönderiler ve kullanıcılarla bir blog uygulaması oluşturacağız. Uygulamamızla ilgili tüm veriler, Firebase veritabanı URL'si 'https://docs-examples.firebaseio.com/fireblog' adresinde, 'fireblog' yolu altında saklanacaktır.

Bazı kullanıcı verilerini Firebase veritabanımıza kaydederek başlayalım. Her kullanıcıyı benzersiz bir kullanıcı adıyla saklayacağız ve ayrıca tam adını ve doğum tarihini de saklayacağız. Her kullanıcı benzersiz bir kullanıcı adına sahip olacağından, bu kullanım mantıklı PUT yerine burada POST zaten anahtar var ve bir tane oluşturmak gerekmez çünkü.

Kullanılması PUT , bizim Firebase veritabanına bir dize, sayı, boolean, dizi veya herhangi JSON nesnesi yazabilirsiniz. Bu durumda ona 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 otomatik olarak alt konumlara iç içe geçmiş bir şekilde eşlenir. Yeni oluşturulan düğüme gidersek "Alan Turing" değerini göreceğiz. Verileri doğrudan bir alt konuma da 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ğerin bir nesne olarak aynı anda yazılması ve bunları alt konumlara ayrı ayrı yazılması) aynı verilerin Firebase veritabanımıza kaydedilmesine neden olacaktır:

{
  "users": {
    "alanisawesome": {
      "date_of_birth": "June 23, 1912",
      "full_name": "Alan Turing"
    }
  }
}

Başarılı bir istek, bir tarafından belirtilecektir 200 OK HTTP durum kodu ve tepki biz veritabanına yazdığı verileri içerir. İlk örnek, verileri izleyen istemcilerde yalnızca bir olayı tetiklerken, ikinci örnek iki olayı tetikleyecektir. Kullanıcı yolunda veri zaten mevcutsa, ilk yaklaşımın bunun üzerine yazacağını, ancak ikinci yöntemin diğer çocukları değiştirmeden bırakırken yalnızca her bir ayrı alt düğümün değerini değiştireceğini belirtmek önemlidir. PUT eşdeğerdir set() JavaScript SDK'sında.

PATCH ile Veri Güncelleme

Bir kullanarak PATCH isteği, biz mevcut verilerin üzerine yazmadan bir yerde belirli çocukları güncelleyebilirsiniz. En bir ile yaptığı kullanıcı verilerine Turing'in takma ad ekleyelim PATCH isteği:

curl -X PATCH -d '{
  "nickname": "Alan The Machine"
}' \
  'https://docs-examples.firebaseio.com/fireblog/users/alanisawesome.json'

Yukarıdaki istek yazacak nickname bizim için alanisawesome silmeden nesne name veya birthday çocuğu. Biz verilmiş olsaydı unutmayın PUT yerine buraya isteği, name ve birthday onlar istek dahil edilmedi beri silinmiş olurdu. Firebase veritabanımızdaki veriler şimdi şöyle 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, bir tarafından belirtilecektir 200 OK HTTP durum kodu ve tepki veritabanına yazılan güncellenmiş verileri içerir.

Firebase ayrıca çok yollu güncellemeleri de destekler. O Bu araçlar PATCH şimdi aynı anda Firebase veritabanında birden fazla yerde değerleri güncelleyebilirsiniz, olanak sağlayan güçlü bir özellik olur verilerinizi denormalize . Çok yollu güncellemeleri kullanarak, hem Alan'a hem de 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 Alan ve Grace'in 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"
    }
  }
}

Dahil edilen yollarla nesneler yazarak nesneleri güncellemeye çalışmanın farklı davranışlarla sonuçlanacağını unutmayın. Bunun yerine Grace ve Alan'ı şu ş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'

Farklı davranış, yani bütün üzerine yazmaktan Bu sonuçlar /fireblog/users düğümünü:

{
  "users": {
    "alanisawesome": {
      "nickname": "Alan The Machine"
    },
    "gracehop": {
      "nickname": "Amazing Grace"
    }
  }
}

Verileri Koşullu İsteklerle Güncelleme

Verileri mevcut durumuna göre güncellemek için işlemlere eşdeğer REST olan koşullu istekleri kullanabilirsiniz. Örneğin, bir artı oy sayacını artırmak ve sayının aynı anda birden çok olumlu oyu yansıttığından emin olmak istiyorsanız, sayaca yeni değeri yazmak için koşullu bir istek kullanın. Sayacı aynı sayıya çeviren iki yazma yerine, yazma isteklerinden biri başarısız olur ve isteği yeni değerle yeniden deneyebilirsiniz.
  1. Bir konumda koşullu bir istek gerçekleştirmek için, o konumdaki mevcut veriler için benzersiz tanımlayıcıyı veya ETag'ı alın. Bu konumdaki veriler değişirse, ETag de değişir. Sen başka herhangi bir yöntemle bir ETag talep edebilirsiniz PATCH . Aşağıdaki örnek bir kullanır GET isteği.
    curl -i 'https://test.example.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
    
    Özellikle başlık getiri HTTP yanıtı olarak belirtilen konumu ETAG'da ETag çağ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
    
  2. Bir sonraki döndürülen ETag dahil PUT veya DELETE özellikle ETag değeri uyan güncelleme verilerine isteği. Örneğimizde sonra, 11 ya da 1 ile 10 arasında başlangıç getirilen değerinden daha büyük sayacı güncelleştirir ve değer artık stoktaki aşağıdaki kodu kullanmak ise istek başarısız:
    curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match:[ETAG_VALUE]'
    
    Belirtilen de veri değeri konumu hala 10'da ETag olan PUT isteği maçları ve istek veritabanına 11 yazma yerine geldi.
    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
    
    konumu artık başka bir kullanıcı veritabanına yeni bir değer yazdı oluşabilir ETag, eşleşirse, istek konuma yazmadan başarısız olur. Dönüş yanıtı, yeni değeri 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
    
  3. İsteği yeniden denemeye karar verirseniz yeni bilgileri kullanın. Gerçek Zamanlı Veritabanı, başarısız olan koşullu istekleri otomatik olarak yeniden denemez. Ancak, fail yanıtı tarafından döndürülen bilgilerle yeni bir koşullu istek oluşturmak için yeni değeri ve ETag'ı kullanabilirsiniz.

REST tabanlı şartlı istekler HTTP uygulamak durumunda maçın standardı. Bununla birlikte, aşağıdaki şekillerde standarttan farklıdırlar:

  • Her if-match isteği için birden fazla değil, yalnızca bir ETag değeri sağlayabilirsiniz.
  • Standart ETag öğelerini tüm istekleri ile iade edilmesi olduğunu iddia etseler de, Gerçek Zamanlı Veri Tabanı sadece dahil istekleri ile ETAGların döndüren X-Firebase-ETag başlığındaki. Bu, standart istekler için faturalandırma maliyetlerini azaltır.

Koşullu istekler ayrıca tipik REST isteklerinden daha yavaş olabilir.

Veri Listelerini Kaydetme

Biz gönderebileceğiniz bir Firebase veritabanı referansına eklenen her çocuk için benzersiz, zaman damgası tabanlı anahtarı oluşturmak için POST isteği. Bizim için users her kullanıcı benzersiz bir kullanıcı adı beri yolu, bizim kendi anahtarlarını tanımlamak için mantıklıydı. Ama kullanıcıların uygulama için blog gönderileri eklerken, bir kullanacağız POST isteği her blog yayını için bir anahtar otomatik olarak oluşturun:

curl -X POST -d '{
  "author": "alanisawesome",
  "title": "The Turing Machine"
}' 'https://docs-examples.firebaseio.com/fireblog/posts.json'

Bizim posts yolu şimdi aşağıdaki verilere sahip:

{
  "posts": {
    "-JSOpn9ZC54A4P4RoqVa": {
      "author": "alanisawesome",
      "title": "The Turing Machine"
    }
  }
}

Anahtar olduğunu Bildirimi -JSOpn9ZC54A4P4RoqVa biz kullandığı için otomatik bizim için oluşturulmuştur POST isteği. Başarılı bir istek, bir tarafından belirtilecektir 200 OK HTTP durum kodu ve tepki eklendi yeni verilerin anahtarını içerir:

{"name":"-JSOpn9ZC54A4P4RoqVa"}

Verileri Kaldırma

Veritabanından veri kaldırmak için, bir gönderebilirsiniz DELETE biz verileri silmek istiyorum hangi yolun URL ile isteği. Aşağıdaki bizim dan Alan silmek istiyorsunuz users yolu:

curl -X DELETE \
  'https://docs-examples.firebaseio.com/fireblog/users/alanisawesome.json'

Başarılı bir DELETE isteği ile belirtilecektir 200 OK JSON içeren bir tepki ile HTTP durum kodu null .

URI Parametreleri

REST API, veritabanına veri yazarken aşağıdaki URI parametrelerini kabul eder:

yetki

auth isteği parametresi ile korunan verilere erişim sağlar Firebase Gerçek Zamanlı Veri Tabanı Kuralları ve tüm istek türleri tarafından desteklenmektedir. Argüman ya bizim Firebase uygulaması gizli ya da biz ele alacağımız jetonun bir kimlik doğrulama olabilir kullanıcı yetkilendirme bölümünde . Aşağıdaki örnekte biz göndermek POST bir ile isteği auth parametresi, CREDENTIAL ya bizim Firebase uygulaması sırrı veya bir kimlik doğrulama kodunun alınmasıyla:

curl -X POST -d '{"Authenticated POST request"}' \
  'https://docs-examples.firebaseio.com/auth-example.json?auth=CREDENTIAL'

Yazdır

print parametresi bize veritabanından bizim tepkinin biçimi belirtmek sağlar. Ekleme print=pretty isteğimiz bir insan-okunabilir formatta veri dönecektir için. print=pretty tarafından desteklenen GET , PUT , POST , PATCH ve DELETE istekleri.

Veri yazarken sunucudan çıktı bastırmak için, ekleyebilir print=silent talebimize. Oluşan yanıt boş ve ile gösterilir olacak 204 No Content isteği başarılı olursa HTTP durum kodu. print=silent tarafından desteklenen GET , PUT , POST ve PATCH istekleri.

Sunucu Değerlerini Yazma

Sunucu değerleri ile tek bir amacı, bir tutucu değeri kullanılarak bir yerde yazılabilir ".sv" tuşu. 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 şunları yapabiliriz:

curl -X PUT -d '{".sv": "timestamp"}' \
  'https://docs-examples.firebaseio.com/alanisawesome/createdAt.json'

"timestamp" yalnızca desteklenen sunucu değerdir ve milisaniye cinsinden UNIX Dönemden beri zamanıdır.

Yazma Performansını Geliştirme

Biz veritabanına büyük miktarda veri yazıyorsanız, kullanabileceğimiz print=silent bizim yazma performansı ve azalma bant genişliği kullanımını artırmak için parametre. Normal yazma davranışında sunucu, yazılan JSON verileriyle yanıt verir. Ne zaman print=silent belirtilmişse, sunucu hemen veri bant genişliği kullanımını azaltmak, alındıktan sonra bağlantıyı kapatır.

Biz veritabanına birçok istek yapıyoruz durumlarda, bir göndererek HTTPS bağlantı yeniden kullanabilirsiniz Keep-Alive HTTP başlığı isteği.

Hata Koşulları

REST API, bu koşullar altında hata kodlarını döndürür:

HTTP Durum Kodları
400 Geçersiz İstek

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

  • Ayrıştırılamıyor PUT veya POST verilerini.
  • Eksik PUT veya POST verileri.
  • İstek girişimleri için PUT veya POST çok büyük veri.
  • REST API çağrısı, yolun bir parçası olarak geçersiz alt adlar içeriyor.
  • REST API çağrı yolu çok uzun.
  • İstek, tanınmayan bir sunucu değeri içeriyor.
  • Sorgu için dizine tanımlı değil Firebase Gerçek Zamanlı Veri Tabanı Kuralları .
  • İstek, belirtilen sorgu parametrelerinden birini desteklemiyor.
  • İstek karışımları sığ parametreleri sorgulamak GET isteği.
Yetkisiz 401

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

404 Bulunamadı Belirtilen Firebase veritabanı bulunamadı.
500 iç sunucu hatası Sunucu bir hata döndürdü. Daha fazla ayrıntı için hata mesajına bakın.
503 Hizmet Kullanılamıyor Belirtilen Firebase Gerçek Zamanlı Veritabanı geçici olarak kullanılamıyor, bu da isteğin denenmediği anlamına geliyor.

Verilerin Güvenliği

Firebase, hangi kullanıcıların verilerimizin farklı düğümlerine okuma ve yazma erişimi olduğunu tanımlamamıza izin veren bir güvenlik diline sahiptir. Sen bu konuda daha fazla bilgi bulabilirsiniz Gerçek Zamanlı Veri Tabanı Kuralları .

Artık verileri kaydetmeyi ele aldığımıza göre, bir sonraki bölümde REST API aracılığıyla verilerimizi Firebase veritabanından nasıl alacağımızı öğrenebiliriz.