Penggunaan API
Anda dapat menggunakan URL Firebase Realtime Database sebagai endpoint REST. Yang Anda perlukan untuk
adalah menambahkan .json
ke akhir URL dan mengirim permintaan
dari klien HTTPS favorit Anda.
HTTPS diperlukan. Firebase hanya merespons traffic terenkripsi sehingga data Anda tetap aman.
GET - Membaca Data
Data dari Realtime Database Anda dapat dibaca dengan mengeluarkan permintaan HTTP
GET
ke endpoint. Contoh berikut
menunjukkan bagaimana Anda dapat mengambil
yang sebelumnya Anda simpan di Realtime Database.
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Permintaan yang berhasil ditunjukkan dengan HTTP 200 OK
kode status. Respons berisi data yang terkait dengan
jalur dalam permintaan GET
.
{ "first": "Jack", "last": "Sparrow" }
PUT - Menulis Data
Anda dapat menulis data dengan permintaan PUT
.
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
Permintaan yang berhasil ditunjukkan dengan HTTP 200 OK
kode status. Respons berisi data yang ditentukan dalam
Permintaan PUT
.
{ "first": "Jack", "last": "Sparrow" }
POST - Mendorong Data
Untuk mencapai nilai yang setara dengan push()
JavaScript
(lihat Daftar Data),
Anda dapat mengirimkan permintaan POST
.
curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' \ 'https://[PROJECT_ID].firebaseio.com/message_list.json'
Permintaan yang berhasil ditunjukkan dengan status HTTP 200 OK
pada kode sumber. Respons berisi nama anak dari data baru
yang ditentukan dalam permintaan POST
.
{ "name": "-INOQPH-aV_psbk3ZXEX" }
PATCH - Memperbarui Data
Anda dapat memperbarui turunan tertentu di suatu lokasi tanpa menimpa file
data yang ada menggunakan permintaan PATCH
. Anak-anak yang disebutkan di
data yang ditulis dengan PATCH
akan ditimpa, tetapi dihilangkan
turunan tidak dihapus. Fungsi ini sama dengan JavaScript
Fungsi update()
.
curl -X PATCH -d '{"last":"Jones"}' \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'
Permintaan yang berhasil ditunjukkan dengan status HTTP 200 OK
pada kode sumber. Respons berisi data yang ditentukan dalam
Permintaan PATCH
.
{ "last": "Jones" }
DELETE - Menghapus Data
Anda dapat menghapus data dengan permintaan DELETE
:
curl -X DELETE \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Permintaan DELETE
yang berhasil ditunjukkan dengan
Kode status HTTP 200 OK
dengan respons yang berisi JSON
null
.
Penggantian Metode
Jika Anda melakukan panggilan REST dari browser yang tidak mendukung
metode sebelumnya, Anda bisa mengganti metode permintaan dengan membuat
Permintaan POST
dan setelan metode Anda menggunakan
header permintaan X-HTTP-Method-Override
.
curl -X POST -H "X-HTTP-Method-Override: DELETE" \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'
Anda juga dapat menggunakan parameter kueri x-http-method-override
.
curl -X POST \ 'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json?x-http-method-override=DELETE'
Permintaan Bersyarat
Permintaan bersyarat, REST yang setara dengan operasi transaksi SDK, memperbarui data sesuai dengan kondisi tertentu. Lihat ringkasan alur kerja dan pelajari permintaan bersyarat lebih lanjut untuk REST di Menyimpan Data.
ETag Firebase
Firebase ETag adalah ID unik untuk data saat ini di lokasi yang ditentukan. Jika
perubahan data di lokasi itu, ETag juga akan berubah. ETag Firebase harus ditentukan dalam
untuk permintaan REST awal (biasanya
GET
, tetapi dapat berupa apa pun selain PATCH
).
curl -i 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'
if-match
Kondisi if-match
menentukan nilai ETag untuk data yang ingin diperbarui.
Jika Anda menggunakan kondisi ini, Realtime Database hanya akan menyelesaikan permintaan ketika ETag yang ditentukan dalam
sesuai dengan ETag data yang ada dalam database. Ambil
ETag di lokasi dengan permintaan ETag Firebase. Jika Anda ingin menimpa
lokasi apa pun yang
null, gunakan null_etag
.
curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match: [ETAG_VALUE]'
Respons yang diharapkan
Tabel berikut memberikan ringkasan respons yang diharapkan untuk setiap jenis permintaan, berdasarkan pencocokan ETag.
Jenis Permintaan | 'X-Firebase-ETag: true' | ETag cocok dengan if_match: <matching etag> |
ETag tidak sesuai dengan if_match: <no matching etag> |
|
---|---|---|---|---|
DAPATKAN | Status/Konten Respons | 200: "<data_at_path>" | 400: "...tidak didukung.." | 400: "...tidak didukung.." |
Header yang Ditambahkan | ETag: <ETag_of_data> | T/A | T/A | |
PUT | Status/Konten Respons | 200: "<put_data>" | 200: "<put_data>" | 412: "...ETag tidak cocok.." |
Header yang Ditambahkan | ETag: <ETag_of_put_data> | T/A | ETag: <database_ETag> | |
SESUDAH | Status/Konten Respons | 200: "<post_data>" | 400: "...tidak didukung.." | 400: "...tidak didukung.." |
Header yang Ditambahkan | ETag: <ETag_of_post_data> | T/A | T/A | |
PATCH | Status/Konten Respons | 400: "...tidak didukung.." | 400: "...tidak didukung.." | 400: "...tidak didukung.." |
Header yang Ditambahkan | T/A | T/A | T/A | |
HAPUS | Status/Konten Respons | 200: null | 200: "<data_after_put>" | 412: "...ETag tidak cocok.." |
Header yang Ditambahkan | ETag: <ETag_of_null> | T/A | ETag: <database_ETag> |
Parameter Kueri
Firebase Database REST API menerima parameter kueri berikut dan nilai-nilai:
access_token
Didukung oleh semua jenis permintaan. Mengautentikasi permintaan ini untuk mengizinkan akses ke data yang dilindungi oleh Firebase Realtime Database Security Rules. Lihat Dokumentasi autentikasi REST untuk mengetahui detailnya.
curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'
shallow
Ini adalah fitur lanjutan, yang dirancang untuk membantu Anda bekerja dengan
{i>dataset<i} tanpa perlu
mengunduh semuanya. Tetapkan ini ke
true
untuk membatasi kedalaman data yang ditampilkan
di suatu lokasi. Jika data di lokasi tersebut adalah dasar JSON
(string, angka, atau boolean), nilainya hanya akan dikembalikan. Jika
snapshot data di lokasi tersebut adalah objek JSON,
untuk setiap kunci akan dipangkas menjadi true
.
Argumen | Metode REST | Deskripsi |
---|---|---|
dangkal | DAPATKAN | Batasi kedalaman respons. |
curl 'https://[PROJECT_ID].firebaseio/.json?shallow=true'
Perlu diketahui bahwa shallow
tidak dapat digabungkan dengan kueri lainnya
parameter.
Memformat data yang ditampilkan dalam respons dari server.
Argumen | Metode REST | Deskripsi |
---|---|---|
sangat | GET, PUT, POST, PATCH, DELETE | Melihat data dalam format yang dapat dibaca manusia. |
senyap | GET, PUT, POST, PATCH |
Digunakan untuk menyembunyikan output dari server saat menulis data.
Respons yang dihasilkan akan kosong dan ditunjukkan oleh
kode status HTTP 204 No Content .
|
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'
callback
Hanya didukung oleh GET
. Untuk melakukan panggilan REST dari browser web
di seluruh domain, Anda dapat menggunakan JSONP untuk menggabungkan respons dalam JavaScript
fungsi callback. Tambahkan callback=
untuk menggabungkan REST API
data yang ditampilkan dalam fungsi callback yang Anda tentukan.
<script> function gotData(data) { console.log(data); } </script> <script src="https://[PROJECT_ID].firebaseio.com/.json?callback=gotData"></script>
format
Jika disetel ke export
, server akan mengenkode prioritas di
yang dihasilkan.
Argumen | Metode REST | Deskripsi |
---|---|---|
ekspor | DAPATKAN | Sertakan informasi prioritas dalam respons. |
curl 'https://[PROJECT_ID].firebaseio.com/.json?format=export'
download
Hanya didukung oleh GET
. Jika Anda ingin memicu file
mendownload data Anda dari browser web, tambahkan download=
.
Hal ini menyebabkan layanan REST menambahkan
header yang sesuai sehingga
{i>browser<i} tahu cara
menyimpan data ke dalam file.
curl 'https://[PROJECT_ID].firebaseio/.json?download=myfilename.txt'
timeout
Gunakan ini untuk membatasi waktu baca yang dibutuhkan di sisi server. Jika pembacaan tidak selesai dalam waktu yang ditentukan, permintaan akan diakhiri dengan permintaan error 400. Ini sangat berguna ketika Anda mengharapkan pengiriman data berukuran kecil dan tidak ingin menunggu terlalu lama untuk mengambil subpohon yang mungkin berukuran besar. Aktual waktu baca dapat bervariasi berdasarkan ukuran data dan penyimpanan dalam cache.
Tentukan timeouts
menggunakan format berikut: 3ms
,
3s
, atau 3min
, dengan angka dan satuan. Jika tidak
ditentukan, maksimum timeout
dari 15min
akan
diterapkan. Jika timeout
tidak positif, atau melebihi nilai maksimum,
permintaan akan ditolak dengan pesan {i>error<i} HTTP 400.
writeSizeLimit
Untuk membatasi ukuran tulisan, Anda dapat menentukan parameter kueri
writeSizeLimit
sebagai
tiny
(target=1 dtk), small
(target=10 dtk),
medium
(target=30 dtk), large
(target=60 dtk).
Realtime Database memperkirakan ukuran setiap permintaan penulisan dan pembatalan
permintaan yang akan memakan waktu
lebih lama dari waktu target.
Jika Anda menentukan unlimited
, operasi tulis yang sangat besar (dengan payload hingga 256 MB)
diizinkan, yang berpotensi memblokir permintaan berikutnya saat database memproses
operasi saat ini. Operasi tulis tidak dapat dibatalkan setelah sampai ke server.
curl -X DELETE 'https://docs-examples.firebaseio.com/rest/delete-data.json?writeSizeLimit=medium'
Anda akan melihat pesan error berikut jika tulisan terlalu besar:
Error: WRITE_TOO_BIG: Data to write exceeds the maximum size that can be modified with a single request.
Selain itu, Anda dapat menetapkan defaultWriteSizeLimit
untuk seluruh database
menggunakan Firebase CLI. Batas ini berlaku untuk semua permintaan, termasuk permintaan dari SDK.
Database baru dibuat dengan defaultWriteSizeLimit
ditetapkan ke large
.
Anda tidak dapat menetapkan defaultWriteSizeLimit
ke tiny
menggunakan Firebase CLI.
firebase database:settings:set defaultWriteSizeLimit large
orderBy
Lihat bagian dalam panduan tentang data yang dipesan untuk informasi selengkapnya.
limitToFirst, limitToLast, startAt, endAt, equalTo
Lihat bagian dalam panduan tentang memfilter data untuk informasi selengkapnya.
Streaming dari REST API
Endpoint Firebase REST mendukung EventSource / Peristiwa Terkirim Server dan berperforma tinggi karena merupakan protokol biner. Untuk mengalirkan perubahan ke satu lokasi di Realtime Database, Anda perlu melakukan beberapa hal:
- Tetapkan header Accept klien ke
"text/event-stream"
- Patuhi Pengalihan HTTP, terutama kode status HTTP 307
-
Jika lokasi memerlukan izin untuk membaca, Anda harus menyertakan
Parameter
auth
Sebagai balasannya, server akan mengirimkan kejadian bernama
sebagai status data pada
perubahan URL yang diminta. Struktur pesan ini sesuai dengan
protokol EventSource
.
event: event name data: JSON encoded data payload
Server mungkin mengirimkan kejadian berikut:
put
Data yang dienkode JSON adalah objek dengan dua kunci: path dan data. path menunjukkan sesuai dengan URL permintaan. Klien harus mengganti semua data di lokasi tersebut dalam cache dengan data.
patch
Data yang dienkode JSON adalah objek dengan dua kunci: path dan data. path menunjukkan sesuai dengan URL permintaan. Untuk setiap kunci di data, klien harus mengganti kunci yang sesuai dalam cache-nya dengan data untuk kunci tersebut dalam pesan.
keep-alive
Data untuk peristiwa ini adalah null
. Anda tidak perlu melakukan tindakan apa pun.
batal
Beberapa error tak terduga dapat mengirim peristiwa `cancel` dan menghentikan koneksi. Penyebabnya dijelaskan dalam data yang diberikan untuk peristiwa ini. Beberapa kemungkinan penyebabnya adalah berikut ini: Akun Layanan 1. Firebase Realtime Database Security Rules tidak lagi mengizinkan pembacaan di lokasi yang diminta. Tujuan Deskripsi `data` untuk penyebab ini adalah "Izin ditolak". 2. Penulisan memicu streamer peristiwa yang mengirim hierarki JSON besar yang melebihi batas, 512MB. `Data` untuk penyebab ini adalah "Payload yang ditentukan terlalu besar, minta dengan lebih sedikit data."
auth_revoked
Data untuk peristiwa ini adalah string yang menunjukkan bahwa kredensial
masa berlakunya telah berakhir. Peristiwa ini dikirim saat auth
yang disediakan
tidak lagi valid.
Berikut adalah contoh rangkaian peristiwa yang mungkin dikirim server:
// 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}}
Prioritas
Informasi prioritas untuk lokasi dapat direferensikan dengan
"anak virtual" bernama .priority
. Anda dapat membaca prioritas dengan
GET
permintaan dan tulis dengan permintaan PUT
.
Misalnya, permintaan berikut mengambil prioritas
Node users/tom
:
curl 'https://[PROJECT_ID].firebaseio/users/tom/.priority.json'
Untuk menulis prioritas dan data secara bersamaan, Anda dapat menambahkan
.priority
turunan ke payload JSON:
curl -X PUT -d '{"name": {"first": "Tom"}, ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom.json'
Untuk menulis prioritas dan nilai primitif (misalnya, string) secara bersamaan,
Anda dapat menambahkan turunan .priority
dan memasukkan nilai primitif
dalam turunan .value
:
curl -X PUT -d '{".value": "Tom", ".priority": 1.0}' \ 'https://[PROJECT_ID].firebaseio/users/tom/name/first.json'
Perintah ini menulis "Tom"
dengan prioritas 1.0
.
Prioritas dapat disertakan pada kedalaman berapa pun dalam payload JSON.
Nilai Server
Anda dapat menulis nilai server di
suatu lokasi menggunakan nilai placeholder yang
adalah objek dengan satu kunci .sv
. Nilai untuk kunci tersebut adalah
jenis nilai server yang
ingin Anda tetapkan. Misalnya,
set nilai node ke nilai node server Firebase saat ini
stempel waktu:
curl -X PUT -d '{".sv": "timestamp"}' \ 'https://[PROJECT_ID].firebaseio/users/tom/startedAtTime.json'
Anda juga dapat menulis prioritas menggunakan nilai server, dengan "anak virtual" jalur yang disebutkan di atas.
Nilai server yang didukung meliputi:
Nilai Server | |
---|---|
stempel waktu | Waktu sejak epoch UNIX, dalam milidetik. |
inkremental | Berikan nilai delta bilangan bulat atau floating point, dalam bentuk
{ ".sv": {"increment": <delta_value> }} , yang akan digunakan secara atomik
menambah nilai {i>database<i} saat ini. Jika data belum ada, pembaruan akan disetel
data ke nilai delta. Jika salah satu nilai delta atau data yang ada mengambang
tersebut, kedua nilai akan ditafsirkan sebagai angka floating point dan diterapkan pada
{i>back-end<i} sebagai nilai ganda. Aritmatika ganda dan representasi
dari nilai ganda mengikuti
Semantik IEEE 754. Jika ada luapan bilangan bulat positif/negatif, jumlah akan dihitung
sebagai {i>double<i}. |
Mengambil dan Memperbarui Firebase Realtime Database Security Rules
REST API juga dapat digunakan untuk mengambil Firebase Realtime Database Security Rules untuk project Firebase Anda. Anda akan memerlukan rahasia proyek Firebase, yang yang dapat ditemukan pada Panel Service Accounts di project Firebase deskripsi tempat.
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'
Mengautentikasi permintaan
Secara {i>default<i}, permintaan REST dijalankan tanpa otentikasi dan hanya akan berhasil jika
Realtime Database Aturan mengizinkan akses baca atau tulis publik ke
yang mengupload data. Untuk mengautentikasi permintaan Anda, gunakan
Parameter kueri access_token=
atau auth=
.
Pelajari lebih lanjut autentikasi melalui REST API di Mengautentikasi Permintaan REST.
Kondisi Error
REST API Firebase Database dapat menampilkan kode error berikut.
Kode Status HTTP | |
---|---|
400 Permintaan Tidak Valid |
Salah satu kondisi error berikut:
|
401 Tidak Sah |
Salah satu kondisi error berikut:
|
404 Tidak Ditemukan | Realtime Database yang ditentukan tidak ditemukan. |
500 Error Server Internal | Server menampilkan error. Lihat pesan error untuk informasi lebih lanjut spesifikasi pendukung. |
503 Layanan Tidak Tersedia | Firebase Realtime Database yang ditentukan untuk sementara tidak tersedia, yang berarti permintaan tidak dicoba. |
412 Prekondisi Gagal | Nilai ETag yang ditentukan dalam permintaan di header if-match tidak sesuai dengan nilai server. |