Menggunakan Firebase Tanpa Server – Aplikasi Seluler dan Web Menjadi Mudah

Diterbitkan: 2022-03-11

Aplikasi seluler dan web biasanya memerlukan server back-end. Aplikasi web memerlukan server web untuk mengirimkan konten. Aplikasi juga perlu menyimpan profil pengguna dan media seperti gambar dan video. Komunikasi antara aplikasi dan server sering dilakukan dengan menggunakan API, yang biasanya REST.

Aplikasi dikodekan dalam berbagai bahasa. Aplikasi iOS ditulis dalam Swift atau Objective-C. Aplikasi Android ditulis dalam Java atau Kotlin. Aplikasi web ditulis dalam HTML, CSS, JavaScript, dan seringkali kerangka kerja yang kompleks seperti Angular atau React. Pengembang front-end perlu mengetahui bahasa yang relevan dan alat pengembangan yang terkait.

Server back-end ditulis dalam berbagai bahasa termasuk Go, Java, PHP, dan Python. Masing-masing bahasa ini memiliki rangkaian pustakanya sendiri untuk memfasilitasi penulisan aplikasi yang kompleks.

Sebagian besar pengembang menganggap diri mereka sebagai pengembang front-end atau back-end. Pengembang tumpukan penuh yang mahir dalam kedua peran relatif jarang.

Menjalankan dan memelihara server back-end memiliki tantangannya sendiri. Server perlu dibangun, diperbarui, dan dicadangkan. Server juga perlu diamankan untuk mencegah kehilangan data yang tidak disengaja atau berbahaya atau akses ke data sensitif. Selain itu, server harus memiliki nama host dan alamat IP yang ditetapkan agar dapat terhubung.

Apa itu Firebase?

Firebase dimulai sebagai arsitektur perpesanan seluler yang diakuisisi oleh Google. Sejak itu telah berkembang menjadi rangkaian lebih dari 25 komponen yang beroperasi dengan Google Cloud Platform.

Firebase terdiri dari perangkat pengembangan perangkat lunak (SDK), yang memungkinkan pengembang seluler dan web mengakses fungsionalitas cloud secara sederhana, aman, dan andal. Mereka secara otomatis mengkompensasi konektivitas jaringan yang buruk. Ada konsol web Firebase untuk mengaktifkan, mengelola, dan mengamankan komponen. Ada juga alat baris perintah dan REST API untuk penggunaan yang lebih mendalam.

Beberapa komponen Firebase lebih dikenal daripada yang lain. Ada sedikit ketergantungan antar komponen, yang memungkinkan adopsi fungsionalitas secara bertahap. Otentikasi dan analitik Firebase adalah yang paling banyak digunakan.

Firebase telah berkembang menjadi platform yang memungkinkan pengembang front-end seluler dan web untuk mengembangkan aplikasi lengkap tanpa memerlukan server back-end. Penyempurnaan terbaru telah sangat memfasilitasi solusi tanpa server yang memberikan alternatif yang layak, terukur, dan hemat biaya untuk solusi server Cloud Virtual Machine.

Paket Harga dan Penagihan Firebase

Paket penagihan Firebase dasar, yang disebut Spark, gratis. Ada batasan untuk penggunaan sumber daya cloud, tetapi cukup murah hati. Dimungkinkan untuk menjalankan aplikasi berukuran wajar tanpa dikenakan biaya apa pun.

Situs web dengan konten hingga 1GB dan transfer kurang dari 10GB/bulan dapat dihosting di bawah paket Spark. Firestore memungkinkan hingga 1GB data dan lalu lintas jaringan hingga 10GB/bulan. Batas penyimpanan cloud hingga 5GB data dan unduhan hingga 1GB/hari.

Jika aplikasi membutuhkan lebih banyak sumber daya, paket penagihan berbayar seperti bayar sesuai pemakaian diperlukan. Batas gratis paket Spark masih berlaku. Biaya yang dapat ditagih cukup rendah. Harga dapat ditemukan di halaman harga Firebase.

Mesin virtual yang dijalankan di cloud dikenakan biaya saat dijalankan, meskipun tidak sedang digunakan. Solusi tanpa server Firebase menskalakan ke nol. Ini berarti bahwa sumber daya hanya berjalan secara efektif saat digunakan dan tidak dikenakan biaya saat tidak digunakan. Ini sangat ideal untuk aplikasi untuk bisnis musiman seperti persewaan liburan atau acara berkala seperti konser. Akan ada banyak aktivitas diikuti dengan berbulan-bulan tidak aktif.

Cara Menyiapkan Firebase

Akun email diperlukan untuk otentikasi. Akun email Google lebih disukai. Mereka dapat dibuat di https://mail.google.com.

Akun Google Cloud Platform (GCP) juga diperlukan. Sebuah percobaan gratis tersedia di sini. Ini memberi Anda kredit $300, yang tersedia selama setahun. Kartu kredit diperlukan sebagai bukti identitas. Google dapat mengenakan biaya $1 dan kemudian mengembalikannya. Kartu kredit akan didebit setiap bulan jika penagihan diaktifkan dan sumber daya yang dapat ditagih digunakan. Ada juga perusahaan penyedia Google yang bertindak sebagai perantara untuk penagihan. Anda membayar penyedia untuk penggunaan cloud, dan mereka membayar Google. Mereka memiliki paket penagihan sendiri dan mungkin menawarkan uji coba gratis.

Penting untuk sering memantau bagian penagihan konsol cloud untuk memantau penggunaan. Sangat mudah untuk menjaga sumber daya seperti penyimpanan aktif saat tidak diperlukan, yang dapat menimbulkan biaya yang cukup besar dari waktu ke waktu.

Proyek Firebase juga merupakan proyek GCP. Anda dapat membuat proyek GCP dan mengimpornya ke Firebase, atau membuat proyek Firebase, yang juga akan membuat proyek GCP. Konsol Firebase ada di sini.

Pengaturan yang berbeda diperlukan untuk berbagai jenis aplikasi. Yang utama adalah Android, iOS, dan aplikasi web. Petunjuk penyiapan dapat ditemukan di Panduan Firebase resmi.

Alat Firebase Command Line Interface (CLI) diperlukan untuk beberapa operasi. Ini mengharuskan Node.js dan alat npm diinstal. Jika berjalan di macOS atau Linux, perintah npm harus dijalankan dengan sudo .

sudo npm install -g firebase-tools

Otentikasi dan Otorisasi

Otentikasi Firebase mungkin merupakan komponen Firebase yang paling banyak digunakan. Pengguna dapat memilih satu atau lebih dari sejumlah mekanisme otentikasi. Ini adalah alamat email dan kata sandi, nomor telepon, dan penyedia identitas gabungan Google, Facebook, Twitter, dan GitHub. Sejumlah mekanisme otentikasi dapat diaktifkan.

UI Firebase meminta pengguna untuk menggunakan mekanisme:

Otentikasi Firebase

Firebase menyediakan antarmuka pengguna untuk autentikasi yang dapat dipanggil dari beberapa baris kode di sisi klien. Ada juga API untuk melakukan otentikasi secara manual. Pada otentikasi yang berhasil, token identitas dihasilkan yang dapat digunakan untuk validasi back-end.

API memungkinkan pengguna administrasi untuk mengelola pengguna secara terprogram. Operasi meliputi:

  • Membuat, memperbarui, dan menghapus pengguna
  • Cari pengguna berdasarkan kriteria pencarian seperti alamat email atau nomor telepon
  • Akses informasi seperti tanggal pembuatan akun dan tanggal dan waktu masuk terakhir
  • Validasi alamat email dan nomor telepon tanpa harus menggunakan alur kerja yang ada

Sebagian besar aplikasi seluler dan web menginginkan sejumlah besar pengguna untuk masuk ke aplikasi mereka. Misalnya, siapa pun yang memiliki akun Google Mail dapat mengautentikasi dirinya sendiri ke aplikasi apa pun yang memungkinkan autentikasi Google. Suatu bentuk otorisasi diperlukan untuk membatasi akses ke aplikasi untuk pengguna tertentu. Ini dapat dengan mudah dilakukan dengan menyimpan asosiasi antara alamat email dan peran akses dalam penyimpanan data. Pada otentikasi yang berhasil, alamat email akan dicari di penyimpanan data. Jika pengguna ada dengan peran yang benar, maka akses diberikan; jika tidak, pengguna akan dipaksa keluar.

Hosting Firebase

Hosting Firebase memungkinkan konten web statis, yang mencakup JavaScript, dihosting di cloud tanpa memerlukan server web. Konten di-cache di tepi Jaringan Pengiriman Konten (CDN) global. Ini memungkinkan akses cepat ke konten dari mana saja di dunia.

Satu atau beberapa situs web dapat dihosting dengan menambahkannya ke bagian Hosting dari proyek Firebase di Firebase Console. Konten dikirimkan melalui SSL dan diberikan dua URL formulir, [https://site-name.web.app] dan https://site-name.firebaseapp.com, di mana site-name proyek atau nama nama situs yang ditentukan pengguna.

Sangat mudah untuk memiliki situs yang dihosting dari nama domain Anda sendiri asalkan Anda dapat mengubah catatan DNS untuk domain tersebut. Anda menambahkan nama domain Anda ke situs di Firebase Console. Anda kemudian akan diberikan catatan TXT DNS, yang harus Anda tambahkan ke DNS domain untuk membuktikan kepada Google bahwa Anda pemilik domain tersebut. Setelah data TXT terlihat, Anda dapat memperoleh data DNS A untuk situs tersebut. Sertifikat SSL secara otomatis disediakan untuk situs tersebut. Setelah sertifikat disediakan, situs tersedia secara global. Pada prinsipnya, ini dapat memakan waktu beberapa jam untuk pembaruan DNS dan penyediaan sertifikat. Dalam prakteknya, proses tersebut dapat diselesaikan dalam waktu 20 menit.

Untuk menambahkan konten ke hosting, pertama-tama, buat direktori untuk situs dan cd ke dalamnya dari baris perintah. Selanjutnya, masuk ke Firebase dan inisialisasi direktori proyek.

 firebase login firebase init

Anda akan diminta untuk memilih proyek dan layanan klien mana yang diperlukan. Layanan selalu dapat ditambahkan nanti dan tidak harus dipilih pada tahap ini.

Buat file bernama firebase.json , yang mendefinisikan direktori root situs web dan file yang akan dikecualikan. Anda juga memerlukan file .gitignore untuk mengecualikan file dari kontrol versi.

 { "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }

Kemudian, salin konten statis ke direktori publik. Terakhir, sebarkan situs ke cloud.

 firebase deploy

Untuk mengubah konten web, cukup ubah file konten dan jalankan perintah deploy. Setiap penerapan muncul sebagai versi di Firebase Console. Anda dapat memutar kembali ke versi sebelumnya dengan satu klik.

Firebase Hosting juga dapat menulis ulang URI ke file, Cloud Functions, dan Cloud Run. Ini sangat menyederhanakan banyak hal karena tidak perlu menetapkan domain ke layanan ini. Penulisan ulang ditentukan dengan menambahkan bagian penulisan ulang ke bagian hosting firebase.json. Penyebaran hosting akan gagal jika layanan tidak ada.

 { "hosting": { "public": "public", "rewrites": [ { "source": "/xxx", "destination": "/profile.html" }, { "source": "/yyy", "function": "profile" }, { "source": "/api{,/**}", "run": { "serviceId": "cloud-api", "region": "europe-west1" } } ] } }

Penyimpanan data

Firebase menyediakan API klien untuk mengakses penyimpanan data berbasis cloud. Ada tiga jenis penyimpanan:

  • Basis Data Waktu Nyata
  • Cloud Firestore
  • Penyimpanan awan

Ini memungkinkan klien seluler dan web untuk menyimpan dan mengambil data tanpa memerlukan server.

Basis Data Waktu Nyata

Realtime Database adalah database NoSQL yang dihosting di cloud. Data di Realtime Database secara otomatis disinkronkan secara real time ke semua perangkat yang terhubung. Ia bekerja lintas platform ke Android, iOS, dan web. Data disimpan sebagai struktur pohon JSON. Aturan keamanan dapat diatur untuk mengontrol akses baca dan tulis ke data.

Setiap perangkat menyimpan salinan lokal dari database. Ini berarti bahwa data tersedia saat tidak terhubung ke jaringan. Saat terhubung kembali, salinan data lokal dan berbasis cloud disinkronkan.

Data dibaca oleh aplikasi menggunakan pendengar. Seorang pendengar mendengarkan pada sebuah simpul di pohon JSON. Setiap kali data diubah di konsol atau oleh pengguna lain, callback listener dipanggil dengan nilai data baru. Realtime Database juga mendukung kueri. Setiap kueri mengembalikan sebuah simpul dan semua simpul turunannya.

Aturan keamanan secara default tidak mengizinkan akses ke data. Aturan dapat ditambahkan secara global atau ke node individu dari objek JSON. Aturan keamanan mengontrol akses baca dan tulis ke data dan dapat melakukan validasi.

Realtime Database paling cocok untuk potongan data kecil yang tidak memerlukan struktur data yang sangat bersarang. Batas gratisnya adalah 1GB data.

Cloud Firestore

Cloud Firestore dipandang sebagai pengganti Realtime Database. Ini memperluas fungsionalitas Realtime Database. Data tidak ada di pohon JSON tetapi kumpulan dokumen hierarkis. Setiap dokumen terdiri dari satu set pasangan kunci-nilai dan sub-dokumen opsional. Kueri memungkinkan pemfilteran dan penyortiran yang lebih kompleks dan hanya mengembalikan dokumen lengkap. Kueri tidak mengembalikan sub-dokumen.

Cloud Firestore akan segera menggantikan Cloud Datastore. Itu dapat dijalankan dalam mode Datastore atau dalam mode asli. Semua aplikasi Datastore akan otomatis dimigrasikan ke Cloud Firestore.

Cloud Firestore paling cocok untuk data yang relatif kecil. Itu dapat memiliki struktur data yang sangat bersarang. Batas gratisnya adalah 1GB data.

Penyimpanan awan

Cloud Storage adalah untuk menyimpan file seperti gambar dan klip video. Klien seluler dan web dapat menggunakan Firebase untuk mengunggah dan mengunduh file langsung ke dan dari cloud tanpa memerlukan server back-end. Batas gratisnya adalah 5GB data.

Fungsi Cloud

Cloud Functions adalah teknologi penting untuk membuat aplikasi tanpa server. Fungsi cloud dapat ditulis dalam JavaScript, TypeScript, Python, atau Go, yang diterapkan langsung ke cloud Google. Suatu fungsi dipicu oleh permintaan HTTP atau oleh peristiwa di cloud seperti menulis ke Cloud Storage.

Cloud Function hanya dapat menangani satu permintaan dalam satu waktu, tetapi cloud secara otomatis menskalakan fungsi dengan mereplikasinya. Cloud Function yang ditulis dengan Python menggunakan library Flask untuk menangani permintaan HTTP. Fungsi mengambil objek permintaan sebagai parameter dan mengembalikan badan respons.

Fungsi Cloud Python sederhana memerlukan direktori kerja, dan titik masuk masuk ke file main.py .

 def simple_cloud_function(request): return "It worked"

Dependensi dikelola oleh pip dan masuk ke file bernama requirements.txt .

 Flask==1.0.2

Sebuah fungsi di-deploy menggunakan fitur command line gcloud . Ini menentukan nama fungsi, bahasa, dan pemicu.

 gcloud functions deploy simple_cloud_function --runtime python37 \ --trigger-http

URL untuk fungsi tersebut ditampilkan pada penerapan dan dapat ditemukan dengan menjalankan perintah deskripsikan.

 gcloud functions describe simple_cloud_function Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function

Cloud Functions dapat memanggil Google Cloud dan Firebase API untuk menyediakan fungsionalitas back-end. Mereka memberikan informasi logging tentang startup eksekusi dan waktu eksekusi. Logging tambahan dapat dengan mudah ditambahkan. Log dapat dilihat di UI Stackdriver Logging dan melalui alat baris perintah gcloud .

 gcloud functions logs read simple_cloud_function

Fungsi dapat dilihat dan dihapus di Google Cloud Console.

Google Cloud Console: Fungsi

Cloud Functions paling baik digunakan untuk operasi yang relatif jarang terjadi. Contoh penggunaannya adalah membuat thumbnail saat gambar diupload ke Cloud Storage. Batas gratisnya adalah 125.000 permintaan per bulan.

Cloud Run

Cloud Run baru-baru ini menambahkan fungsionalitas yang sangat memfasilitasi aplikasi tanpa server. Ini memungkinkan container Docker dijalankan di cloud tanpa harus melakukan penyiapan infrastruktur yang rumit. Itu dapat berjalan dalam mode terkelola, yang menggunakan runtime Knative, yang dibangun di atas Kubernetes. Itu juga dapat berjalan di Anthos, yang juga dibangun di atas Kubernetes tetapi memungkinkan container untuk dijalankan di cloud dan bahkan di pusat data Anda sendiri. Tidak perlu mengatur dan mengelola cluster Kubernetes karena semuanya dilakukan secara otomatis.

Aplikasi apa pun yang dapat dibangun ke dalam gambar Docker dapat dikelola oleh Cloud Run. Secara otomatis menskalakan jumlah kontainer berdasarkan permintaan. Ini juga turun ke nol saat layanan tidak digunakan. Layanan yang tidak digunakan tidak dikenakan biaya.

Wadah Docker perlu menjalankan server web jika ingin merespons permintaan HTTP. Layanan Python akan menggunakan Flask. Titik masuk akan berada di app.py .

 from flask import Flask, request app = Flask(__name__) @app.route('/api/profile') def profile(): page = ''' Page content ''' return page

Aplikasi membutuhkan Dockerfile untuk membuat gambar.

 FROM python ENV APP_HOME /app WORKDIR $APP_HOME COPY . . ENV PORT 8080 RUN pip install Flask gunicorn firebase-admin CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app

Container Cloud Run di-deploy langsung ke cloud.

 gcloud run deploy --image=image_name --platform=managed \ --region=europe-west1 --allow-unauthenticated

Jika nama layanan, platform, wilayah, atau apakah mengizinkan tidak diautentikasi tidak ditentukan dalam konfigurasi proyek atau disediakan pada baris perintah, mereka akan diminta. Setelah penerapan selesai, URL layanan akan ditampilkan. URL juga dapat diperoleh menggunakan perintah gcloud.

 gcloud run services list SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z

URL berisi nomor acak yang sulit dikelola. Di sinilah aturan penulisan ulang Firebase Hosting menjadi paling berguna.

Layanan dapat dilihat dan dihapus di Google Cloud Console.

Google Cloud Console: Layanan

Cloud Run sangat cocok untuk menghosting REST API. Batas gratis bulanan adalah 180.000 detik CPU, memori 360.000 GB detik, 2 juta permintaan, dan jalan keluar jaringan 1 GB. Batas keluar jaringan gratis hanya berlaku jika layanan disebarkan di wilayah Amerika Utara.

Autentikasi

Secara default, Cloud Functions dan container Cloud Run bersifat publik dan dapat diakses oleh siapa saja di internet. Dengan menggunakan aturan IAM di Cloud Console, layanan dapat dibatasi untuk anggota project, Google Grup, dan alamat email individu.

Jika ada pembatasan, akses tidak sah dilarang. Untuk mengaktifkan akses, token identitas harus ditambahkan ke header permintaan. Token identitas dapat diperoleh menggunakan perintah gcloud atau selama proses autentikasi Firebase.

 gcloud auth print-identity-token

Header Otorisasi diperlukan.

 Authorization: Bearer id-token

Ringkasan

Google Cloud Platform dan Firebase menyediakan berbagai produk yang sangat memudahkan pengembangan aplikasi seluler dan web. Kebutuhan akan server back-end dapat sepenuhnya dihilangkan dengan mengizinkan klien mengakses fungsionalitas cloud secara langsung atau dengan menerapkan kode back-end ke cloud menggunakan Cloud Functions atau Cloud Run.

Aplikasi yang ada dapat dimigrasikan ke tanpa server secara bertahap. Bahkan, cara teknologi berkembang dapat berarti bahwa solusi server berbasis mesin virtual tradisional tidak lagi diperlukan.