Firebase Hosting REST API ช่วยให้คุณทำให้ใช้งานได้ในเว็บไซต์ที่โฮสต์โดย Firebase แบบเป็นโปรแกรมและปรับแต่งได้ ใช้ REST API นี้เพื่อทำให้เนื้อหา Hosting ใหม่หรือที่อัปเดตแล้วและ การกำหนดค่าใช้งานได้
คุณสามารถใช้ Firebase Hosting REST API เพื่อสร้าง version ใหม่ของชิ้นงานสำหรับเว็บไซต์ อัปโหลดไฟล์ไปยังเวอร์ชันนั้น แล้วทำให้เวอร์ชันนั้นใช้งานได้ในเว็บไซต์ โดยทำแบบเป็นโปรแกรมแทนการใช้ Firebase CLI สำหรับ
การทำให้ใช้งานได้
ตัวอย่างเช่น Firebase Hosting REST API ช่วยให้คุณทำสิ่งต่อไปนี้ได้
กำหนดเวลาการทำให้ใช้งานได้ การใช้ REST API ร่วมกับงาน cron จะช่วยให้คุณเปลี่ยนเนื้อหาที่โฮสต์โดย Firebase ตามกำหนดเวลาปกติได้ (เช่น ทำให้เนื้อหาเวอร์ชันพิเศษที่เกี่ยวข้องกับวันหยุดหรือกิจกรรมใช้งานได้)
ผสานรวมกับเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ คุณสามารถสร้างตัวเลือกในเครื่องมือเพื่อ ทำให้โปรเจ็กต์เว็บแอปใช้งานได้ใน Firebase Hosting ได้ด้วยการคลิกเพียงครั้งเดียว (เช่น คลิกปุ่มทำให้ใช้งานได้ภายใน IDE)
ทำให้ใช้งานได้โดยอัตโนมัติเมื่อมีการสร้างเนื้อหาสแตติก เมื่อกระบวนการสร้างเนื้อหาสแตติกแบบเป็นโปรแกรม (เช่น เนื้อหาที่ผู้ใช้สร้างขึ้น เช่น Wiki หรือบทความข่าว) คุณสามารถทำให้เนื้อหาที่สร้างขึ้นใช้งานได้เป็นไฟล์สแตติกแทนที่จะแสดงแบบไดนามิก ซึ่งจะช่วยประหยัดพลังการประมวลผลที่มีค่าใช้จ่ายสูงและแสดงไฟล์ในลักษณะที่ปรับขนาดได้มากขึ้น
คู่มือนี้จะอธิบายวิธีเปิดใช้ ตรวจสอบสิทธิ์ และให้สิทธิ์ API ก่อน จากนั้นจะแสดงตัวอย่างการสร้างFirebase Hosting เวอร์ชัน, การอัปโหลดไฟล์ที่จำเป็นไปยังเวอร์ชันนั้น และสุดท้ายคือการทำให้ เวอร์ชันนั้นใช้งานได้
นอกจากนี้ คุณยังดูข้อมูลเพิ่มเติมเกี่ยวกับ REST API นี้ได้ใน เอกสารอ้างอิง REST API ฉบับHostingเต็ม
ก่อนเริ่มต้น: เปิดใช้ REST API
คุณต้องเปิดใช้ Firebase Hosting REST API ในคอนโซล Google API โดยทำดังนี้
เปิดหน้า API ในคอนโซล Google APIFirebase Hosting
เลือกโปรเจ็กต์ 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_IDนี้ระบบจะใช้
SITE_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 นี้ในคำขอ 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ซึ่งเป็น URL ที่เฉพาะเจาะจงสำหรับเวอร์ชันใหม่
ในขั้นตอนถัดไปเพื่ออัปโหลดไฟล์ใหม่ 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
การอัปโหลดที่สำเร็จจะแสดงการตอบกลับ HTTPS 200 OK
ขั้นตอนที่ 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ของเวอร์ชัน
ที่มีการกำหนดค่า Hosting และไฟล์เนื้อหาทั้งหมดสำหรับ
เวอร์ชันใหม่
เรียกใช้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" }
ตอนนี้การกำหนดค่า Hosting และไฟล์ทั้งหมดสำหรับเวอร์ชันใหม่ควรได้รับการทำให้ใช้งานได้ในเว็บไซต์แล้ว และคุณสามารถเข้าถึงไฟล์ได้โดยใช้ URL ต่อไปนี้
https://SITE_ID.web.app/file1https://SITE_ID.web.app/file2https://SITE_ID.web.app/file3
นอกจากนี้ คุณยังเข้าถึงไฟล์เหล่านี้ได้ใน URL ที่เชื่อมโยงกับโดเมน
SITE_ID.firebaseapp.com
และคุณยังดูการเผยแพร่ใหม่ที่แสดงใน Hostingแดชบอร์ด ของFirebaseคอนโซลได้ด้วย