Menggunakan emulator Firestore secara lokal
Google Cloud CLI menyediakan emulator dalam memori lokal untuk Firestore yang dapat Anda gunakan untuk menguji aplikasi. Anda dapat menggunakan emulator dengan semua library klien Firestore. Anda hanya boleh menggunakan emulator untuk pengujian lokal.
Jangan gunakan emulator untuk deployment produksi. Karena emulator hanya menyimpan data dalam memori, emulator tidak akan mempertahankan data di seluruh operasi.
Menginstal emulator
Untuk menginstal emulator Firestore, instal dan update gcloud CLI:
Update penginstalan gcloud CLI Anda untuk mendapatkan fitur terbaru:
gcloud components update
Menjalankan emulator
Jalankan perintah berikut untuk memulai emulator:
gcloud emulators firestore start
Emulator akan mencetak host dan nomor port tempatnya berjalan.
Secara default, emulator mencoba menggunakan
127.0.0.1:8080
. Untuk mengikat emulator ke host dan port tertentu, gunakan flag--host-port
opsional, yang menggantikan HOST dan PORT:gcloud emulators firestore start --host-port=HOST:PORT
Ketik
Control + C
untuk menghentikan emulator. Emulator juga dapat dihentikan dengan POST ke/shutdown
. Contoh:curl -d '' HOST:PORT/shutdown
Menghubungkan ke emulator
Cara Anda terhubung ke emulator bergantung pada jenis library klien, library klien server, atau SDK seluler/web.
Library klien server
Untuk menghubungkan library klien server Firestore (C#, Go, Java, Node.js, PHP, Python, dan Ruby), tetapkan variabel lingkungan FIRESTORE_EMULATOR_HOST
. Saat variabel lingkungan ini ditetapkan, library klien server akan otomatis terhubung ke emulator.
export FIRESTORE_EMULATOR_HOST="HOST:PORT"
Android, platform Apple, dan Web SDK
Contoh berikut menunjukkan cara menghubungkan Android, platform Apple, dan Web SDK ke emulator Firestore:
Android
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFirestore firestore = FirebaseFirestore.getInstance(); firestore.useEmulator("10.0.2.2", 8080); FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder() .setPersistenceEnabled(false) .build(); firestore.setFirestoreSettings(settings);
Swift
let settings = Firestore.firestore().settings settings.host = "127.0.0.1:8080" settings.cacheSettings = MemoryCacheSettings() settings.isSSLEnabled = false Firestore.firestore().settings = settings
Web versi 9
import { getFirestore, connectFirestoreEmulator } from "firebase/firestore"; // firebaseApps previously initialized using initializeApp() const db = getFirestore(); connectFirestoreEmulator(db, '127.0.0.1', 8080);
Web versi 8
// Firebase previously initialized using firebase.initializeApp(). var db = firebase.firestore(); if (location.hostname === "localhost") { db.useEmulator("127.0.0.1", 8080); }
Emulator Firestore akan menghapus isi database saat dinonaktifkan. Karena cache offline Firestore SDK tidak dihapus secara otomatis, sebaiknya nonaktifkan persistensi lokal dalam konfigurasi emulator Anda untuk menghindari perbedaan antara database yang diemulasi dan cache lokal. Di Web SDK, persistensi dinonaktifkan secara default.
Menghapus data emulator
Emulator Firestore menyertakan endpoint REST untuk menghapus semua data yang saat ini ada di emulator. Anda dapat menggunakan endpoint ini untuk menghapus data di antara pengujian tanpa menonaktifkan emulator.
Untuk menghapus semua data di emulator, lakukan operasi DELETE
HTTP terhadap
endpoint berikut, ganti HOST dan PORT dengan
host dan port yang Anda pilih, lalu ganti PROJECT_ID dengan
project ID Anda sendiri:
http://HOST:PORT/emulator/v1/projects/PROJECT_ID/databases/(default)/documents
Sesuaikan host dan port jika emulator tidak menggunakan 127.0.0.1:8080
.
Kode Anda harus menunggu konfirmasi REST bahwa penghapusan selesai atau gagal.
Anda dapat melakukan operasi ini dari shell menggunakan curl
:
$ curl -v -X DELETE "http://HOST:PORT/emulator/v1/projects/PROJECT_ID/databases/(default)/documents"
Perbedaan emulator Firestore dengan produksi
Emulator Firestore berupaya mereplikasi perilaku layanan produksi secara akurat, tetapi ada beberapa batasan yang perlu diketahui.
Transaksi
Emulator tidak menerapkan semua perilaku transaksi yang terlihat dalam layanan produksi. Saat Anda menguji fitur yang melibatkan beberapa penulisan serentak ke satu dokumen, emulator mungkin lambat untuk menyelesaikan permintaan tulis. Dalam beberapa kasus, mungkin diperlukan waktu hingga 30 detik hingga kunci dapat dilepas. Jika perlu, sesuaikan waktu tunggu pengujian.
Indeks
Emulator tidak melacak indeks gabungan, melainkan akan mengeksekusi kueri apa pun yang valid. Pastikan untuk menguji aplikasi Anda terhadap instance Firestore yang sebenarnya untuk menentukan indeks yang diperlukan.
Batas
Emulator tidak menerapkan semua batasan yang diterapkan dalam layanan produksi. Misalnya, emulator dapat mengizinkan transaksi yang akan ditolak oleh layanan produksi karena terlalu besar. Pastikan Anda memahami batasan yang didokumentasikan dan mendesain aplikasi untuk menghindarinya secara proaktif.