Google Cloud CLI menyediakan emulator dalam memori lokal untuk Firestore yang dapat Anda gunakan untuk menguji aplikasi mode Firestore dalam mode Datastore. Anda dapat menggunakan emulator dengan semua library klien mode Datastore. Anda hanya boleh menggunakan emulator untuk pengujian lokal.
Gunakan gcloud emulators firestore
dengan --database-mode=datastore-mode
untuk menguji perilaku Firestore dalam mode Datastore.
Jangan gunakan emulator untuk deployment produksi. Karena emulator hanya menyimpan data dalam memori, emulator tidak mempertahankan data di seluruh proses.
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 --database-mode=datastore-mode
Emulator mencetak host dan nomor port tempat emulator berjalan.
Secara default, emulator mencoba menggunakan
127.0.0.1:8080
. Untuk mengikat emulator ke host dan port tertentu, gunakan flag--host-port
opsional, dengan mengganti HOST dan PORT:gcloud emulators firestore start --database-mode=datastore-mode --host-port=HOST:PORT
Gunakan pintasan keyboard
Control + C
untuk menghentikan emulator.
Menghubungkan ke emulator
Untuk menghubungkan library klien dan aplikasi ke emulator,
tetapkan variabel lingkungan DATASTORE_EMULATOR_HOST
. Jika variabel lingkungan ini ditetapkan, library klien akan otomatis terhubung ke emulator.
export DATASTORE_EMULATOR_HOST="HOST:PORT"
Mengimpor entity ke emulator
Fitur impor emulator memungkinkan Anda memuat entity dari sekumpulan file ekspor entity ke dalam emulator. File ekspor entitas dapat berasal dari ekspor database mode Datastore atau dari instance emulator.
Anda dapat mengimpor entitas ke emulator dengan dua cara. Cara pertama adalah menambahkan
flag import-data
ke perintah mulai emulator Anda. Metode kedua adalah
mengirim permintaan impor POST ke emulator. Anda dapat menggunakan
curl atau alat serupa. Lihat contoh
berikut.
Protokol
curl -X POST http://localhost:8080/emulator/v1/projects/PROJECT_ID:import \ -H 'Content-Type: application/json' \ -d '{"database":"DATABASE", "export_directory":"EXPORT_DIRECTORY"}'
localhost:8080
jika emulator menggunakan port yang berbeda.Flag CLI
gcloud emulators firestore start --database-mode=datastore-mode --import-data=EXPORT_DIRECTORY
dengan:
[PROJECT_ID]
adalah ID project Anda.[DATABASE]
adalah jalur database. Misalnya, project dengan database default akan terlihat seperti berikut:{"database":"projects/myProject/databases/"}
[EXPORT_DIRECTORY]
adalah jalur ke fileoverall_export_metadata
dari file ekspor entitas Anda. Contoh:{"export_directory":"/home/user/myexports/2024-03-26T19:39:33_443/2024-03-26T19:39:33_443.overall_export_metadata"}
Mengekspor entity di emulator
Fitur ekspor emulator memungkinkan Anda menyimpan entity di emulator ke dalam sekumpulan file ekspor entity. Kemudian, Anda dapat menggunakan operasi impor untuk memuat entitas dalam file ekspor entitas ke dalam database mode Datastore atau ke dalam instance emulator.
Anda dapat mengekspor entity dari emulator dengan dua cara. Cara pertama adalah menambahkan
flag export-on-exit
ke perintah mulai emulator Anda. Metode kedua adalah
mengirim permintaan ekspor POST
ke emulator. Anda dapat menggunakan
curl atau alat serupa. Lihat contoh
berikut.
Protokol
curl -X POST http://localhost:8080/emulator/v1/projects/PROJECT_ID:export \ -H 'Content-Type: application/json' \ -d '{"database":"DATABASE_PATH", "export_directory":"EXPORT_DIRECTORY"}'
localhost:8080
jika emulator menggunakan port yang berbeda.Flag CLI
gcloud emulators firestore start --database-mode=datastore-mode --export-on-exit=EXPORT_DIRECTORY
dengan:
[PROJECT_ID]
adalah ID project Anda.[DATABASE_PATH]
adalah jalur database. Misalnya, project dengan database default akan terlihat seperti berikut:{"database":"projects/myProject/databases/"}
[EXPORT_DIRECTORY]
menentukan direktori tempat emulator menyimpan file ekspor entitas. Direktori ini tidak boleh berisi kumpulan file ekspor entitas. Contoh:{"export_directory":"/home/user/myexports/2024-03-26/"}
Mempertahankan data di emulator
Secara default, emulator Firestore tidak menyimpan data ke disk. Untuk mempertahankan data emulator, jalankan perintah berikut untuk menggunakan flag impor dan ekspor guna memuat dan menyimpan data di seluruh instance emulator:
gcloud emulators firestore start --database-mode=datastore-mode --import-data=EXPORT_DIRECTORY --export-on-exit=EXPORT_DIRECTORY
Mereset data emulator
Emulator Firestore menyertakan endpoint REST untuk mereset semua data di emulator. Anda dapat menggunakan endpoint ini untuk menghapus data di antara pengujian tanpa menonaktifkan emulator.
Untuk mereset semua data di emulator, lakukan operasi HTTP POST
terhadap
endpoint berikut, ganti HOST dan PORT dengan
host dan port yang Anda pilih, serta ganti PROJECT_ID dengan
project ID Anda sendiri:
http://HOST:PORT/reset
Sesuaikan host dan port jika emulator tidak menggunakan 127.0.0.1:8080
.
Kode Anda harus menunggu konfirmasi REST bahwa reset selesai atau gagal.
Anda dapat melakukan operasi ini dari shell menggunakan curl
:
$ curl -X POST "http://HOST:PORT/reset"
Perbedaan emulator dengan produksi
Emulator berupaya mereplikasi perilaku layanan produksi secara akurat, tetapi ada beberapa batasan yang perlu diketahui.
Konkurensi dan konsistensi
Emulator hanya mendukung konkurensi pesimistis dan konsistensi kuat. Emulator tidak mendukung setelan konkurensi optimis dan konsistensi pada akhirnya.
Transaksi
Emulator tidak berupaya meniru perilaku transaksi yang terlihat dalam layanan produksi. Contoh ini menggunakan pendekatan penguncian sederhana dan tidak mencoba mencerminkan berbagai mode serentak yang ditawarkan di lingkungan produksi.
Saat Anda menguji fitur yang melibatkan beberapa penulisan serentak ke satu dokumen, emulator mungkin lambat untuk menyelesaikan permintaan tulis. Mungkin diperlukan waktu hingga 30 detik agar emulator melepaskan kunci. Jika Anda perlu menyesuaikan interval waktu tunggu pengujian, lakukan penyesuaian tersebut.
Emulator juga tidak berupaya meniru semua batas produksi, seperti batas waktu & batas ukuran, yang melibatkan transaksi. Jika Anda menguji fitur yang bergantung pada batas produksi ini, sebaiknya gunakan lingkungan produksi, bukan emulator.
Indeks
Emulator tidak melacak indeks gabungan, melainkan mengeksekusi kueri apa pun yang valid. Pastikan untuk menguji aplikasi Anda terhadap instance mode Datastore sungguhan 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.
Langkah berikutnya
- Pelajari cara menggunakan Entity, properti, dan kunci
- Pelajari kueri