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
คลิกเปิดใช้ในหน้า API ของ Firebase Hosting
ขั้นตอนที่ 1: รับโทเค็นการเข้าถึงเพื่อตรวจสอบสิทธิ์และให้สิทธิ์คำขอ API
โปรเจ็กต์ Firebase รองรับบัญชีบริการของ Google ซึ่งคุณใช้เรียก API ของเซิร์ฟเวอร์ Firebase จากเซิร์ฟเวอร์แอปหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณกำลังพัฒนาโค้ดในเครื่องหรือติดตั้งใช้งานแอปพลิเคชันในองค์กร คุณสามารถใช้ข้อมูลเข้าสู่ระบบที่ได้รับผ่านบัญชีบริการนี้เพื่อให้สิทธิ์คำขอของเซิร์ฟเวอร์
หากต้องการตรวจสอบสิทธิ์บัญชีบริการและให้สิทธิ์บัญชีดังกล่าว ในการเข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON
วิธีสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการ
ในFirebase Console ให้เปิด การตั้งค่า > บัญชีบริการ
คลิกสร้างคีย์ส่วนตัวใหม่ แล้วยืนยันโดยคลิกสร้างคีย์
จัดเก็บไฟล์ 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ได้รับการอัปโหลดในเวอร์ชันก่อนหน้าแล้ว ดังนั้นแฮชของfile1จึงไม่ได้รวมอยู่ในรายการuploadRequiredHashesuploadUrlซึ่งเป็นของเวอร์ชันใหม่โดยเฉพาะ
ในขั้นตอนถัดไปเพื่ออัปโหลดไฟล์ใหม่ 2 ไฟล์ คุณจะต้องใช้แฮชและ
uploadURLจากคำตอบของ versions.populateFiles
ขั้นตอนที่ 5: อัปโหลดไฟล์ที่จำเป็น
คุณต้องอัปโหลดแต่ละไฟล์ที่จำเป็นแยกกัน (ไฟล์ที่แสดงใน uploadRequiredHashes จากการตอบกลับของ versions.populateFiles ในขั้นตอนก่อนหน้า) สำหรับการอัปโหลดไฟล์เหล่านี้ คุณจะต้องมีแฮชของไฟล์และ
uploadUrl จากขั้นตอนก่อนหน้า
ต่อท้าย เครื่องหมายทับและแฮชของไฟล์ไปยัง
uploadUrlเพื่อ สร้าง 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 ได้ด้วย