Firebase Hosting REST API ช่วยให้คุณ ทำให้ใช้งานได้แบบเป็นโปรแกรมและปรับแต่งได้ในเว็บไซต์ที่โฮสต์ด้วย Firebase ใช้ REST API นี้เพื่อติดตั้งใช้งานHostingเนื้อหาและการกำหนดค่าใหม่หรือที่อัปเดตแล้ว
คุณสามารถใช้ Firebase Hosting REST API เพื่อสร้างversionใหม่ของชิ้นงานสำหรับเว็บไซต์ อัปโหลดไฟล์ไปยังเวอร์ชัน แล้วจึงนำเวอร์ชันไปใช้กับเว็บไซต์ได้โดยอัตโนมัติ ซึ่งเป็นอีกทางเลือกหนึ่งแทนการใช้ Firebase CLI สำหรับการทำให้ใช้งานได้
ตัวอย่างเช่น Firebase HostingREST API ช่วยให้คุณทำสิ่งต่อไปนี้ได้
กำหนดเวลาการทำให้ใช้งานได้ การใช้ REST API ร่วมกับงาน Cron จะช่วยให้คุณเปลี่ยนเนื้อหาที่โฮสต์ใน Firebase ตามกำหนดการปกติได้ (เช่น เพื่อ นําเนื้อหาเวอร์ชันพิเศษที่เกี่ยวข้องกับวันหยุดหรือกิจกรรมไปใช้งาน)
ผสานรวมกับเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ คุณสามารถสร้างตัวเลือกในเครื่องมือเพื่อ ทำให้โปรเจ็กต์เว็บแอปใช้งานได้ใน Firebase Hosting ได้ด้วยการคลิกเพียงครั้งเดียว (เช่น คลิกปุ่มทำให้ใช้งานได้ภายใน IDE)
ระบบจะทำการติดตั้งใช้งานโดยอัตโนมัติเมื่อสร้างเนื้อหาแบบคงที่ เมื่อกระบวนการ สร้างเนื้อหาแบบคงที่โดยใช้โปรแกรม (เช่น เนื้อหาที่ผู้ใช้สร้างขึ้น อย่างเช่นวิกิหรือบทความข่าว) คุณสามารถนําเนื้อหาที่สร้างขึ้นไปใช้เป็น ไฟล์แบบคงที่แทนที่จะแสดงแบบไดนามิก ซึ่งช่วยประหยัดค่าใช้จ่ายด้าน กำลังประมวลผลและแสดงไฟล์ในลักษณะที่ปรับขนาดได้มากขึ้น
คู่มือนี้จะอธิบายวิธีเปิดใช้ ตรวจสอบสิทธิ์ และให้สิทธิ์ API ก่อน จากนั้นคู่มือนี้จะแสดงตัวอย่างการสร้างFirebase Hosting เวอร์ชัน การอัปโหลดไฟล์ที่จำเป็นไปยังเวอร์ชัน และการติดตั้งใช้งาน เวอร์ชันในที่สุด
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับ REST API นี้ได้ในเอกสารอ้างอิง REST API ฉบับHostingเต็ม
ก่อนเริ่มต้น: เปิดใช้ REST API
คุณต้องเปิดใช้ Firebase HostingREST API ในคอนโซล Google APIs โดยทำดังนี้
เปิดหน้า API ของ Firebase Hosting ในคอนโซล Google APIs
เมื่อได้รับข้อความแจ้ง ให้เลือกโปรเจ็กต์ Firebase
คลิกเปิดใช้ในหน้า Firebase Hosting API
ขั้นตอนที่ 1: รับโทเค็นการเข้าถึงเพื่อตรวจสอบสิทธิ์และให้สิทธิ์คำขอ API
โปรเจ็กต์ Firebase รองรับบัญชีบริการของ Google ซึ่งคุณใช้เพื่อเรียก API ของเซิร์ฟเวอร์ Firebase จากเซิร์ฟเวอร์แอปหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณ พัฒนาโค้ดในเครื่องหรือติดตั้งใช้งานแอปพลิเคชันในองค์กร คุณสามารถใช้ ข้อมูลเข้าสู่ระบบที่ได้รับโดยใช้บัญชีบริการนี้เพื่อให้สิทธิ์คำขอของเซิร์ฟเวอร์
คุณดูบัญชีบริการทั้งหมดสำหรับโปรเจ็กต์ Firebase ได้ใน
หากต้องการตรวจสอบสิทธิ์บัญชีบริการและให้สิทธิ์เข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON
วิธีสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการ
ในFirebaseคอนโซล ให้ไปที่
การตั้งค่า > แท็บบัญชีบริการคลิกสร้างคีย์ส่วนตัวใหม่ แล้วยืนยันโดยคลิก สร้างคีย์
จัดเก็บไฟล์ JSON ที่มีคีย์อย่างปลอดภัย
ใช้ข้อมูลเข้าสู่ระบบ Firebase ร่วมกับไลบรารีการตรวจสอบสิทธิ์ของ Google สำหรับภาษาที่คุณต้องการเพื่อดึงโทเค็นเพื่อการเข้าถึง OAuth 2.0 ที่มีอายุสั้น
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); }); }); }
ในตัวอย่างนี้ ไลบรารีของไคลเอ็นต์ Google API จะตรวจสอบสิทธิ์คำขอด้วย โทเค็นเว็บ JSON หรือ JWT ดูข้อมูลเพิ่มเติมได้ที่ โทเค็นเว็บ 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(); }
หลังจากโทเค็นเพื่อการเข้าถึงหมดอายุ ระบบจะเรียกใช้เมธอดรีเฟรชโทเค็นโดยอัตโนมัติเพื่อดึงโทเค็นเพื่อการเข้าถึงที่อัปเดตแล้ว
ขั้นตอนที่ 2: ตรวจสอบว่าโปรเจ็กต์มีเว็บไซต์ Hosting เริ่มต้น
ก่อนการติดตั้งใช้งานครั้งแรกใน Firebase Hosting โปรเจ็กต์ Firebase ต้องมีHosting SITEเริ่มต้น
ตรวจสอบว่าโปรเจ็กต์มีเว็บไซต์ Hosting เริ่มต้นอยู่แล้วหรือไม่โดยเรียกใช้ปลายทาง
sites.listเช่น
คำสั่ง cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sitesคำขอ HTTPS ดิบ
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites HTTP/1.1 Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
หากเว็บไซต์ใดเว็บไซต์หนึ่งมี
"type": "DEFAULT_SITE"แสดงว่าโปรเจ็กต์ของคุณมีเว็บไซต์ Hosting เริ่มต้นอยู่แล้ว ข้ามส่วนที่เหลือของขั้นตอนนี้ และไปที่ขั้นตอนถัดไป สร้างเวอร์ชันใหม่สำหรับเว็บไซต์หากได้รับอาร์เรย์ว่าง แสดงว่าคุณไม่มีHosting เว็บไซต์เริ่มต้น ทำตามขั้นตอนที่เหลือให้เสร็จสมบูรณ์
กำหนด
SITE_IDสำหรับเว็บไซต์ Hostingเริ่มต้น โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อตัดสินใจเลือกSITE_IDSITE_IDนี้ใช้เพื่อสร้างโดเมนย่อย Firebase เริ่มต้น
และSITE_ID.web.appSITE_ID.firebaseapp.comSITE_IDต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้- ต้องเป็นป้ายกำกับชื่อโฮสต์ที่ถูกต้อง ซึ่งหมายความว่าต้องไม่มี
.,_ฯลฯ - ต้องมีความยาวไม่เกิน 30 อักขระ
- ต้องไม่ซ้ำกันทั่วโลกภายใน Firebase
- ต้องเป็นป้ายกำกับชื่อโฮสต์ที่ถูกต้อง ซึ่งหมายความว่าต้องไม่มี
โปรดทราบว่าเรามักจะแนะนำให้ใช้รหัสโปรเจ็กต์เป็น
SITE_IDสำหรับเว็บไซต์ Hosting เริ่มต้น ดูวิธีค้นหารหัสนี้ได้ในหัวข้อทำความเข้าใจโปรเจ็กต์ Firebaseสร้างเว็บไซต์ Hosting เริ่มต้นโดยเรียกใช้ปลายทาง
sites.createโดยใช้SITE_IDที่ต้องการเป็นพารามิเตอร์siteIdเช่น
คำสั่ง cURL
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites?siteId=SITE_IDคำขอ HTTPS ดิบ
Host: firebasehosting.googleapis.com POST /v1beta1/projects/PROJECT_ID/sites?siteId=SITE_ID Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
การเรียก API นี้ไปยัง
sites.createจะแสดง JSON ต่อไปนี้{ "name": "projects/PROJECT_ID/sites/SITE_ID", "defaultUrl": "https://SITE_ID.web.app", "type": "DEFAULT_SITE" }
ขั้นตอนที่ 3: สร้างเวอร์ชันใหม่สำหรับเว็บไซต์
การเรียก API ครั้งแรกคือการสร้าง
Version ใหม่สำหรับเว็บไซต์
ในภายหลังของคู่มือนี้ คุณจะอัปโหลดไฟล์ไปยังเวอร์ชันนี้ แล้วจึงนําไปใช้กับเว็บไซต์
กำหนด SITE_ID สำหรับเว็บไซต์ที่คุณต้องการติดตั้งใช้งาน
เรียกใช้ปลายทาง versions.create โดยใช้ SITE_ID ในการเรียก
(ไม่บังคับ) คุณยังส่ง ออบเจ็กต์การกำหนดค่า Firebase Hosting ในการเรียกได้ด้วย ซึ่งรวมถึงการตั้งค่าส่วนหัวที่แคชไฟล์ทั้งหมดตามระยะเวลาที่ระบุ
เช่น
คำสั่ง 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คำขอ HTTPS ดิบ
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" } }] } }
การเรียก API นี้ไปยัง versions.create จะแสดง JSON ต่อไปนี้
{
"name": "sites/SITE_ID/versions/VERSION_ID",
"status": "CREATED",
"config": {
"headers": [{
"glob": "**",
"headers": {
"Cache-Control": "max-age=1800"
}
}]
}
}การตอบกลับนี้มีตัวระบุที่ไม่ซ้ำกันสำหรับเวอร์ชันใหม่ในรูปแบบ
sites/SITE_ID/versions/VERSION_ID คุณจะต้องใช้ตัวระบุที่ไม่ซ้ำกันนี้ตลอดทั้งคู่มือเพื่ออ้างอิงเวอร์ชันที่เฉพาะเจาะจงนี้
ขั้นตอนที่ 4: ระบุรายการไฟล์ที่ต้องการติดตั้งใช้งาน
ตอนนี้คุณมีตัวระบุเวอร์ชันใหม่แล้ว คุณต้องบอก Firebase Hostingว่าคุณต้องการที่จะนำไฟล์ใดไปใช้ในเวอร์ชันใหม่นี้
โปรดทราบว่า Hosting มีขีดจำกัดขนาดสูงสุดสำหรับไฟล์แต่ละไฟล์อยู่ที่ 2 GB
API นี้กำหนดให้คุณระบุไฟล์ด้วยแฮช SHA256 ดังนั้นก่อนที่จะเรียก API คุณจะต้องคำนวณแฮชสำหรับไฟล์แบบคงที่แต่ละไฟล์ก่อนโดยบีบอัดไฟล์ด้วย Gzip แล้วนำแฮช SHA256 ของแต่ละไฟล์ที่บีบอัดใหม่
จากตัวอย่างเดิม สมมติว่าคุณต้องการติดตั้งใช้งานไฟล์ 3 ไฟล์ในเวอร์ชันใหม่ ได้แก่ file1, file2 และ file3
บีบอัดไฟล์ด้วย Gzip โดยใช้คำสั่งต่อไปนี้
gzip file1 && gzip file2 && gzip file3
ตอนนี้คุณมีไฟล์บีบอัด 3 ไฟล์ ได้แก่
file1.gz,file2.gzและfile3.gzรับแฮช SHA256 ของแต่ละไฟล์ที่บีบอัด
cat file1.gz | openssl dgst -sha256 66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
cat file2.gz | openssl dgst -sha256 490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
cat file3.gz | openssl dgst -sha256 59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
ตอนนี้คุณมีแฮช SHA256 3 รายการของไฟล์ที่บีบอัด 3 ไฟล์แล้ว
ส่งแฮชทั้ง 3 รายการนี้ในคำขอ API ไปยังปลายทาง
versions.populateFilesแสดงแฮชแต่ละรายการตามเส้นทางที่ต้องการสำหรับไฟล์ที่อัปโหลด (ในตัวอย่างนี้คือ/file1,/file2และ/file3)เช่น
คำสั่ง 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คำขอ HTTPS แบบดิบ
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" } }
การเรียก API นี้ไปยัง versions.populateFiles จะแสดง JSON ต่อไปนี้
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
คำตอบนี้ประกอบด้วย
แฮชของแต่ละไฟล์ที่ต้องอัปโหลด เช่น ในตัวอย่างนี้
file1ได้รับการอัปโหลดในเวอร์ชันก่อนหน้าแล้ว แฮชของไฟล์จึงไม่ได้รวมอยู่ในรายการuploadRequiredHashesuploadUrlซึ่งเป็นของเวอร์ชันใหม่โดยเฉพาะ
ในขั้นตอนถัดไปเพื่ออัปโหลดไฟล์ใหม่ 2 ไฟล์ คุณจะต้องใช้แฮชและ
uploadURLจากคำตอบของ versions.populateFiles
ขั้นตอนที่ 5: อัปโหลดไฟล์ที่จำเป็น
คุณต้องอัปโหลดแต่ละไฟล์ที่จำเป็นแยกกัน (ไฟล์ที่แสดงใน uploadRequiredHashes จากการตอบกลับของ versions.populateFiles ในขั้นตอนก่อนหน้า) สำหรับการอัปโหลดไฟล์เหล่านี้ คุณจะต้องมีแฮชของไฟล์และ
uploadUrl จากขั้นตอนก่อนหน้า
ต่อท้ายด้วยเครื่องหมายทับและแฮชของไฟล์ไปยัง
uploadUrlto เพื่อสร้าง URL เฉพาะไฟล์ในรูปแบบhttps://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASHอัปโหลดไฟล์ที่จำเป็นทั้งหมดทีละไฟล์ (ในตัวอย่างนี้ มีเพียง
file2.gzและfile3.gz) ไปยัง URL เฉพาะไฟล์โดยใช้ชุดคำขอเช่น หากต้องการอัปโหลด
file2.gzที่บีบอัด ให้ทำดังนี้คำสั่ง 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คำขอ HTTPS แบบดิบ
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
การอัปโหลดที่สำเร็จจะแสดง200 OKการตอบกลับ HTTPS
ขั้นตอนที่ 6: อัปเดตสถานะของเวอร์ชันเป็น FINALIZED
หลังจากอัปโหลดไฟล์ทั้งหมดที่แสดงในคำตอบของ
versions.populateFiles แล้ว คุณจะอัปเดตสถานะของเวอร์ชันเป็น
FINALIZED ได้
เรียกใช้ปลายทาง versions.patch
โดยตั้งค่าฟิลด์ status ในคำขอ API เป็น FINALIZED
เช่น
คำสั่ง 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
คำขอ HTTPS แบบดิบ
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"}การเรียก API นี้ไปยัง versions.patch จะแสดง JSON ต่อไปนี้ ตรวจสอบว่าstatusได้รับการอัปเดตเป็น 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" }
ขั้นตอนที่ 7: เปิดตัวเวอร์ชันสำหรับการติดตั้งใช้งาน
เมื่อมีเวอร์ชันสุดท้ายแล้ว ให้เผยแพร่เพื่อการติดตั้งใช้งาน สำหรับขั้นตอนนี้
คุณต้องสร้างReleaseของเวอร์ชัน
ที่มีการกำหนดค่าการโฮสต์และไฟล์เนื้อหาทั้งหมดสำหรับเวอร์ชันใหม่
เรียกใช้ปลายทาง releases.create เพื่อสร้างรีลีสของคุณ
เช่น
คำสั่ง 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
คำขอ HTTPS แบบดิบ
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID/releases?versionName=sites/SITE_ID/versions/VERSION_ID HTTP/1.1 Authorization: Bearer ACCESS_TOKEN
การเรียก API นี้ไปยัง releases.create จะแสดง JSON ต่อไปนี้
{ "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" }
ตอนนี้การกำหนดค่าโฮสติ้งและไฟล์ทั้งหมดสำหรับเวอร์ชันใหม่ควรได้รับการติดตั้งใช้งานในเว็บไซต์แล้ว และคุณจะเข้าถึงไฟล์ได้โดยใช้ URL ต่อไปนี้
https://SITE_ID.web.app/file1https://SITE_ID.web.app/file2https://SITE_ID.web.app/file3
นอกจากนี้ คุณยังเข้าถึงไฟล์เหล่านี้ได้ใน URL ที่เชื่อมโยงกับSITE_ID.firebaseapp.comโดเมน
นอกจากนี้ คุณยังดูผลงานใหม่ที่แสดงใน แดชบอร์ด Hosting ของคอนโซล Firebase ได้ด้วย