REST API Firebase Hosting memungkinkan deployment terprogram dan dapat disesuaikan ke situs yang dihosting oleh Firebase. Gunakan REST API ini untuk men-deploy konten dan konfigurasi Hosting baru atau yang diperbarui.
Selain menggunakan Firebase CLI untuk deployment, Anda juga dapat menggunakan REST API Firebase Hosting untuk secara terprogram membuat version
baru dari aset situs Anda, mengupload file ke versi tersebut, lalu men-deploy-nya ke situs Anda.
Sebagai contoh, dengan REST API Firebase Hosting, Anda dapat:
Menjadwalkan deployment. Dengan menggunakan REST API bersamaan dengan cron job, Anda dapat mengubah konten yang dihosting oleh Firebase sesuai jadwal reguler (misalnya untuk men-deploy konten spesial versi liburan atau terkait acara).
Melakukan integrasi dengan alat developer. Anda bisa membuat opsi dalam alat untuk men-deploy project aplikasi web Anda ke Firebase Hosting hanya dengan sekali klik (misalnya mengklik tombol deploy dalam IDE).
Mengotomatiskan deployment ketika konten statis dihasilkan. Ketika suatu proses menghasilkan konten statis secara terprogram (misalnya konten buatan pengguna seperti artikel wiki atau berita), Anda dapat men-deploy konten yang dihasilkan tersebut sebagai file statis, bukan menayangkannya secara dinamis. Tindakan ini menghemat daya komputasi yang mahal dan menayangkan file dengan cara yang lebih skalabel.
Panduan ini diawali dengan penjelasan cara mengaktifkan, mengautentikasi, dan memberi otorisasi API. Selanjutnya, panduan ini akan memberikan contoh untuk membuat versi Firebase Hosting, mengupload file yang diperlukan ke versi, dan men-deploy versi tersebut.
Anda juga dapat mempelajari REST API lebih lanjut dalam dokumentasi lengkap referensi REST API Firebase Hosting.
Sebelum memulai: Mengaktifkan REST API
Anda harus mengaktifkan REST API Firebase Hosting di konsol Google API:
Buka halaman Firebase Hosting API di konsol Google API.
Saat diminta, pilih project Firebase Anda.
Klik Aktifkan pada halaman Firebase Hosting API.
Langkah 1: Dapatkan token akses untuk mengautentikasi dan memberi otorisasi permintaan API
Project Firebase mendukung akun layanan Google, yang dapat Anda gunakan untuk memanggil API server Firebase dari server aplikasi atau lingkungan tepercaya. Jika Anda mengembangkan kode secara lokal atau men-deploy aplikasi secara lokal, gunakan kredensial yang diperoleh melalui akun layanan ini untuk mengizinkan permintaan server.
Untuk mengautentikasi akun layanan dan memberinya akses ke layanan Firebase, Anda harus membuat file kunci pribadi dalam format JSON.
Untuk membuat file kunci pribadi bagi akun layanan Anda:
Di Firebase console, buka Settings > Service Accounts.
Klik Generate New Private Key, lalu konfirmasikan dengan mengklik Generate Key.
Simpan dengan aman file JSON yang memuat kunci tersebut.
Gunakan kredensial Firebase Anda beserta Library Google Auth untuk bahasa pilihan Anda saat mengambil token akses OAuth 2.0 yang memiliki masa aktif singkat:
node.js
const {google} = require('googleapis'); function getAccessToken() { return new Promise(function(resolve, reject) { var key = require('./service-account.json'); var jwtClient = new google.auth.JWT( key.client_email, null, key.private_key, SCOPES, null ); jwtClient.authorize(function(err, tokens) { if (err) { reject(err); return; } resolve(tokens.access_token); }); }); }
Dalam contoh ini, library klien Google API mengautentikasi permintaan dengan token web JSON, atau yang disebut JWT. Untuk informasi lebih lanjut, baca token web JSON.
Python
def _get_access_token(): """Retrieve a valid access token that can be used to authorize requests. :return: Access token. """ credentials = ServiceAccountCredentials.from_json_keyfile_name( 'service-account.json', SCOPES) access_token_info = credentials.get_access_token() return access_token_info.access_token
Java
private static String getAccessToken() throws IOException { GoogleCredential googleCredential = GoogleCredential .fromStream(new FileInputStream("service-account.json")) .createScoped(Arrays.asList(SCOPES)); googleCredential.refreshToken(); return googleCredential.getAccessToken(); }
Setelah masa berlaku token akses berakhir, metode refresh token akan otomatis dipanggil untuk mengambil token yang telah diperbarui.
Langkah 2: Pastikan project Anda memiliki situs Hosting default
Sebelum melakukan deployment pertama ke Firebase Hosting, project Firebase Anda harus memiliki SITE
Hosting default.
Pastikan bahwa project Anda sudah memiliki situs Hosting default dengan memanggil endpoint
sites.list
.Contoh:
Perintah cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
Permintaan HTTPS mentah
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Jika salah satu situs memiliki
"type": "DEFAULT_SITE"
, berarti project Anda sudah memiliki situs Hosting default. Lewati sisa langkah yang ada dan lanjutkan ke langkah berikutnya: Buat versi baru untuk situs Anda.Jika mendapatkan array kosong, berarti Anda tidak memiliki situs Hosting default. Selesaikan sisa langkah yang ada.
Tentukan
SITE_ID
untuk situs Hosting default Anda. Perhatikan hal berikut saat menentukanSITE_ID
ini:SITE_ID
ini digunakan untuk membuat subdomain Firebase default:
danSITE_ID.web.app
.SITE_ID.firebaseapp.com
SITE_ID
memiliki persyaratan berikut:- Harus berupa label nama host yang valid, artinya tidak boleh berisi
.
,_
, dll. - Harus terdiri dari 30 karakter atau kurang
- Harus unik secara global dalam Firebase
- Harus berupa label nama host yang valid, artinya tidak boleh berisi
Perhatikan bahwa kami sering merekomendasikan penggunaan project ID sebagai
SITE_ID
untuk situs Hosting default Anda. Pelajari cara menemukan ID ini di bagian Memahami project Firebase.Buat situs Hosting default dengan memanggil endpoint
sites.create
menggunakanSITE_ID
yang diinginkan sebagai parametersiteId
.Contoh:
Perintah cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID
Permintaan HTTPS mentah
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Panggilan API untuk
sites.create
akan menampilkan JSON berikut:{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
Langkah 3: Buat versi baru untuk situs Anda
Panggilan API pertama Anda adalah membuat Version
baru untuk situs Anda.
Selanjutnya dalam panduan ini, Anda akan mengupload file ke versi ini, lalu men-deploy-nya ke situs Anda.
Tentukan SITE_ID untuk situs yang menjadi tujuan deployment Anda.
Panggil endpoint versions.create menggunakan SITE_ID Anda dalam panggilan.
(Opsional) Anda juga bisa meneruskan objek konfigurasi Firebase Hosting dalam panggilan, termasuk menetapkan header yang menyimpan semua file selama jangka waktu tertentu dalam cache.
Contoh:
Perintah cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions
Permintaan HTTPS mentah
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/versions HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 134 { "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
Panggilan API untuk versions.create
akan menampilkan JSON berikut:
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "CREATED", "config": { "headers": [{ "glob": "**", "headers": { "Cache-Control": "max-age=1800" } }] } }
Respons ini berisi ID unik untuk versi baru, dalam format: sites/SITE_ID/versions/VERSION_ID
. Anda akan membutuhkan ID unik ini di sepanjang panduan untuk merujuk ke versi khusus ini.
Langkah 4: Tentukan daftar file yang ingin Anda deploy
Setelah memiliki ID versi baru, Anda harus memberi tahu Firebase Hosting file mana yang ingin di-deploy pada versi baru ini.
Perhatikan bahwa Hosting memiliki batas ukuran maksimum sebesar 2 GB untuk setiap file.
API ini mengharuskan Anda mengidentifikasi file dengan hash SHA256. Jadi, agar dapat melakukan panggilan API, pertama-tama Anda harus menghitung hash untuk setiap file statis dengan mengompresi file menggunakan Gzip, kemudian mengambil hash SHA256 dari file yang baru dikompresi.
Selanjutnya, misalkan Anda ingin men-deploy tiga file dalam versi baru: file1
, file2
, dan file3
.
Kompresi file menggunakan Gzip:
gzip file1 && gzip file2 && gzip file3
Sekarang Anda memiliki tiga file yang dikompresi, yaitu
file1.gz
,file2.gz
, danfile3.gz
.Dapatkan hash SHA256 dari setiap file yang dikompresi:
cat file1.gz | openssl dgst -sha256 66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
cat file2.gz | openssl dgst -sha256 490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
cat file3.gz | openssl dgst -sha256 59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
Sekarang Anda memiliki tiga hash SHA256 dari ketiga file yang dikompresi.
Kirim ketiga hash ini dalam permintaan API ke endpoint
versions.populateFiles
. Cantumkan setiap hash berdasarkan jalur yang diinginkan untuk file yang diupload (dalam contoh ini,/file1
,/file2
, dan/file3
).Contoh:
Perintah cURL
$ curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -d '{ "files": { "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4", "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" } }' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles
Permintaan HTTPS Mentah
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/versions/VERSION_ID:populateFiles HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 181 { "files": { "/file1": "66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4", "/file2": "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "/file3": "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" } }
Panggilan API untuk versions.populateFiles
akan menampilkan JSON berikut:
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
Respons ini menyertakan:
Hash dari setiap file yang perlu diupload. Misalnya, dalam contoh ini
file1
telah diupload dalam versi sebelumnya sehingga hash-nya tidak disertakan dalam daftaruploadRequiredHashes
.uploadUrl
yang bersifat khusus untuk versi baru.
Pada langkah berikutnya, untuk mengupload kedua file baru ini, Anda akan membutuhkan hash dan uploadURL
dari respons versions.populateFiles
.
Langkah 5: Upload file yang diperlukan
Anda harus mengupload setiap file yang diperlukan satu per satu (file yang tercantum dalam uploadRequiredHashes
dari respons versions.populateFiles
pada langkah sebelumnya). Untuk upload file ini, Anda akan membutuhkan hash file dan uploadUrl
dari langkah sebelumnya.
Tambahkan garis miring dan hash file ke
uploadUrl
untuk membuat URL khusus file dalam format:https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
.Upload semua file yang diperlukan satu per satu (dalam contoh ini, hanya
file2.gz
danfile3.gz
) ke URL khusus file menggunakan serangkaian permintaan.Misalnya, untuk mengupload
file2.gz
yang dikompresi:Perintah cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @./file2.gz \ https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
Permintaan HTTPS Mentah
Host: upload-firebasehosting.googleapis.com POST /upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/octet-stream Content-Length: 500 content-of-file2.gz
Upload yang berhasil akan menampilkan respons HTTPS 200 OK
.
Langkah 6: Ubah status versi menjadi FINALIZED
Setelah mengupload semua file yang tercantum dalam respons versions.populateFiles
, Anda dapat memperbarui status versi Anda menjadi FINALIZED
.
Panggil endpoint versions.patch
dengan kolom status
dalam permintaan API yang ditetapkan ke FINALIZED
.
Contoh:
Perintah cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"status": "FINALIZED"}' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status
Permintaan HTTPS Mentah
Host: firebasehosting.googleapis.com PATCH /v1beta1/sites/SITE_ID/versions/VERSION_ID?update_mask=status HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json Content-Length: 23 {"status": "FINALIZED"}
Panggilan API untuk versions.patch
akan menampilkan JSON berikut. Pastikan status
telah diupdate menjadi FINALIZED
.
{ "name": "sites/SITE_ID/versions/VERSION_ID", "status": "FINALIZED", "config": { "headers": [{ "glob": "**", "headers": {"Cache-Control": "max-age=1800"} }] }, "createTime": "2018-12-02T13:41:56.905743Z", "createUser": { "email": "SERVICE_ACCOUNT_EMAIL@SITE_ID.iam.gserviceaccount.com" }, "finalizeTime": "2018-12-02T14:56:13.047423Z", "finalizeUser": { "email": "USER_EMAIL@DOMAIN.tld" }, "fileCount": "5", "versionBytes": "114951" }
Langkah 7: Rilis versi untuk deployment
Setelah mendapatkan versi akhir, rilis versi tersebut untuk di-deploy. Untuk melakukan langkah ini, Anda harus membuat Release
dari versi Anda yang berisi konfigurasi hosting dan semua file konten untuk versi baru Anda.
Panggil endpoint releases.create
untuk membuat rilis Anda.
Contoh:
Perintah cURL
curl -H "Authorization: Bearer ACCESS_TOKEN" \ -X POST https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID
Permintaan HTTPS Mentah
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1 Authorization: Bearer ACCESS_TOKEN
Panggilan API untuk releases.create
akan menampilkan JSON berikut:
{ "name": "sites/SITE_ID/releases/RELEASE_ID", "version": { "name": "sites/SITE_ID/versions/VERSION_ID", "status": "FINALIZED", "config": { "headers": [{ "glob": "**", "headers": {"Cache-Control": "max-age=1800"} }] } }, "type": "DEPLOY", "releaseTime": "2018-12-02T15:14:37Z" }
Konfigurasi hosting dan semua file untuk versi baru sekarang sudah di-deploy ke situs Anda, dan Anda dapat mengakses file tersebut menggunakan URL:
https://SITE_ID.web.app/file1
https://SITE_ID.web.app/file2
https://SITE_ID.web.app/file3
File-file ini juga dapat diakses di URL yang terkait dengan domain SITE_ID.firebaseapp.com
Anda.
Anda juga dapat melihat rilis baru yang tercantum di dasbor Hosting Firebase console.