🍣 Upload Data JSON ke Firestore

JAVASCRIPTNODEJSFIRESTOREJSONUPLOADCLIFIREBASECLOUD SERVICE

Firestore

Saya tidak terlalu banyak bermain dengan Cloud Service seperti Firebase misalnya hanya saja untuk pengembangan prototipe ada kalanya saya memakai layanan seperti itu karena selain gratis untuk skala kecil, experience atau pengalaman yang didapat itulah yang terpenting.

Salah satu yang menarik dari Firebase adalah Cloud Firestore yaitu penyimpanan di cloud atau diartikan awan (jargon yg sebenarnya hanyalah remote database), kelebihannya selain tentu saja anda tidak perlu repot instalasi, database jenis ini menang di scalability artinya kebutuhan penyimpanan bisa di skala sampai ukuran berapapun, contohnya saat ini kebutuhan anda sebesar 10GB di kemudian hari bisa anda skala menjadi 1TB tanpa ada pengaturan khusus aka otomatis tetapi tentu saja anda hanya harus mengeluarkan duit lebih banyak saja untuk layanan automasi seperti ini.

Firestore termasuk database non-relasional atau NoSQL sehingga sangat fleksibel untuk menyimpan dokumen secara dinamik dan Google menyediakan pricing yang menurut saya cukup fair dengan sistem Pay As You Go (seperti sistem pembayaran di Amazon AWS) & free plan sebesar 1GB dengan limit request baca atau tulis rata-rata 20k saya kira sudah cukup besar untuk kebutuhan prototipe.

Pertanyaan terbesar saya ketika pertama kali memakai Firestore adalah bagaimana cara mengupload data ke Firestore?

Misalnya kita mempunyai data seperti berikut dan ingin menyimpannya di Firestore,

// simpan di memedi.js
export const memedi = {
  UhhvkLLN5vL7vyvyeGuL: {
    asma: "Genderuwo",
    ciri: [
      "bulu lebat hitam",
      "mata merah menyala",
      "perawakan umumnya tinggi besar",
      "bau seperti jerami terbakar"
    ],
    tipe: "Nocturnal"
  },
  d35Qisa3FByjNdTutmWW: {
    asma: "Tuyul",
    ciri: [
      "perawakan seperti anak kecil",
      "umumnya gundul",
      "suka minuman darah"
    ],
    tipe: "Jongos dunyo brono"
  }
}

Ada 2 cara untuk menyimpan data ke layanan tersebut yaitu secara manual dan melalui programming.

Manual

Anda bisa memasukkan data ke dalam Firestore secara manual dengan mengisi form-form pada web interface.

Firestore web ui

Mengisi data secara manual di Firestore

Untuk data yang sedikit, tidak ada masalah untuk menginput data secara manual tetapi jika data sangat banyak dan termasuk dari bagian workflow suatu sistem maka cara tersebut tidak akan mungkin bisa dilakukan, sehingga dibutuhkan cara otomatis dalam menangani penyimpanan data.

Programming

Karena belum adanya tool khusus resmi dari Google untuk upload data secara bulk atau dalam jumlah banyak, maka cara ini hanya bisa dilakukan melalui pemrograman dan disini saya memakai JavaScript di Node.js.

Akun Firebase anda bisa digunakan untuk menangani berbagai macam fitur di Firebase seperti Storage, Auth dan tentu saja FireStore dan semua itu bisa dilakukan melalui Admin SDK tetapi sebelum memakai SDK ini anda harus mendapatkan security key agar bisa mengakses semua fitur Firebase, caranya klik Project settings -> Service accounts -> Generate new private key

Firestore Admin Key

Buat Security Key

Format dari security key ini merupakan data JSON biasa seperti dibawah, tetapi pastikan tidak anda membaginya ke publik atau anda simpan di repositori. Akan berbahaya kalau key ini digunaka oleh orang lain untuk mengupload data ke akun anda

{
  "type": "service_account",
  "project_id": "<project_id",
  "private_key_id": "<private_key_id>",
  "private_key": "<private_key>",
  "client_email": "<client_email",
  "client_id": "<client_id>",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "<url>"
}

Kemudian buat projek, karena disini saya memakai Node.js maka saya akan memakai npm

mkdir upload_firebase
cd upload_firebase
npm init --yes

Karena saya memakai ESM maka jangan lupa menambahkan "type":"module" pada package.json, kemudian instal Admin SDK melalui npm

npm install --save firebase-admin

Import security key dan data kemudian upload data tersebut ke Firestore

import admin from "firebase-admin";
import serviceAccount from "./privateKey.json";
import { memedi } from "./memedi.js";
const collectionKey = 'memedi';

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "<ganti_dengan_database_url_mu>",
});

const db = admin.firestore();
db.settings({ timestampsInSnapshots: true });
if (memedi && typeof memedi === "object") {
  let datArray = Object.keys(memedi);
  datArray.forEach( docKey => {
    db.collection(collectionKey).doc(docKey).set(data[docKey])
    .then((res) => {
        console.log("Document " + docKey + " successfully written!");
      })
      .catch((error) => {
        console.error("Error writing document: ", error);
      });
  });
}

collection

collection adalah nama dari koleksi data yang akan anda buat di Firestore, dalam hal ini bernama memedi.

doc

doc disini adalah ID dari satu dokumen yang akan anda simpan di Firestore, yaitu UhhvkLLN5vL7vyvyeGuL dan d35Qisa3FByjNdTutmWW. Sedikit catatan untuk doc disini yaitu anda tidak bisa memakai path based string sebagai ID! sebagai contoh string berikut

let noDocKey = "/pulangkampung/sama/dengan/mudik"

karena Firestore akan memperlakukan string tersebut sebagai path data bukan sebagai ID sehingga anda harus merubah string tersebut, sebagai contoh

let docKey = noDocKey.split("/").join("-")
// docKey = -pulangkampung-sama-dengan-mudik

set

set dengan fungsi ini anda bisa menyimpan data pada koleksi dan ID tertentu.

Dengan contoh upload data memedi diatas data pada pada Firestore seperti berikut

Firestore Upload

Data hasil upload di Firestore

Referensi

Link yang membantu dalam penulisan artikel ini 👍

Tetep di 🏡 😷, keep hacking dan stay safe.

Equan Pr.

Equan Pr. (@junwatu)