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. Sebaiknya Anda menggunakan emulator hanya untuk pengujian lokal.
Jangan gunakan emulator untuk deployment produksi. Karena emulator menyimpan data hanya di memori, dan tidak akan mempertahankan data ketika dijalankan.
Menginstal emulator
Untuk menginstal emulator Firestore, instal dan update gcloud CLI:
Mengupdate penginstalan gcloud CLI Anda untuk mendapatkan info terbaru fitur:
gcloud components update
Menjalankan emulator
Jalankan perintah berikut untuk memulai emulator:
gcloud emulators firestore start
Emulator mencetak host dan nomor port tempat emulator berjalan.
Secara default, emulator akan mencoba menggunakan
127.0.0.1:8080
. Untuk mengikat emulator ke host dan port tertentu, gunakan flag--host-port
opsional, mengganti 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, server library klien, library klien, atau SDK seluler/web.
Library klien server
Untuk menghubungkan klien server Firestore
library (C#, Go, Java, Node.js, PHP, Python, dan Ruby),
tetapkan variabel lingkungan FIRESTORE_EMULATOR_HOST
. Jika lingkungan ini
variabel diatur, library klien server akan secara otomatis terhubung ke emulator.
export FIRESTORE_EMULATOR_HOST="HOST:PORT"
Android, platform Apple, dan Web SDK
Contoh-contoh berikut menunjukkan cara menghubungkan Android, platform Apple, dan Web SDK ke Firestore emulator:
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 konten database saat dinonaktifkan. Sejak cache offline Firestore SDK tidak otomatis dihapus, Anda mungkin Anda ingin menonaktifkan persistensi lokal dalam konfigurasi emulator untuk menghindari perbedaan antara database yang diemulasikan 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 berada di emulator. Anda dapat menggunakan endpoint ini untuk menghapus data antarpengujian tanpa menonaktifkan emulator.
Untuk menghapus semua data di emulator, lakukan operasi DELETE
HTTP terhadap
endpoint berikut, menggantikan HOST dan PORT dengan
host dan porta yang Anda pilih dan mengganti PROJECT_ID dengan
ID project 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 menjalankan 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 layanan production
Emulator Firestore berupaya untuk mereplikasi atribut layanan produksi dengan beberapa batasan penting.
Transaksi
Emulator tidak mengimplementasikan semua perilaku transaksi dalam produksi. Saat Anda menguji fitur yang melibatkan beberapa penulisan serentak ke satu dokumen, emulator mungkin lambat untuk menyelesaikan permintaan tulis. Pada beberapa kasus, mungkin diperlukan hingga 30 detik hingga kunci dapat dilepas. Jika perlu, sesuaikan waktu tunggu pengujian.
Indeks
Emulator tidak melacak indeks gabungan dan akan mengeksekusi setiap indeks kueri yang valid. Pastikan untuk menguji aplikasi Anda di Firestore sungguhan instance untuk menentukan indeks yang Anda perlukan.
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.