REST API โฮสติ้งของ Firebase ช่วยให้ใช้งานแบบเป็นโปรแกรมและปรับแต่งได้กับไซต์ที่โฮสต์โดย Firebase ใช้ REST API นี้เพื่อปรับใช้เนื้อหาและการกำหนดค่าโฮสติ้งใหม่หรือที่อัปเดต
อีกทางเลือกหนึ่งนอกเหนือจากการใช้ Firebase CLI สำหรับการปรับใช้ คุณสามารถใช้ Firebase Hosting REST API เพื่อสร้างเนื้อหา version
ใหม่สำหรับเว็บไซต์ของคุณโดยทางโปรแกรม อัปโหลดไฟล์ไปยังเวอร์ชัน จากนั้นปรับใช้เวอร์ชันกับเว็บไซต์ของคุณ
ตัวอย่างเช่น ด้วย Firebase Hosting REST API คุณสามารถ:
กำหนดการปรับใช้ เมื่อใช้ REST API ร่วมกับงาน cron คุณจะสามารถเปลี่ยนเนื้อหาที่โฮสต์โดย Firebase ตามกำหนดเวลาปกติได้ (เช่น เพื่อปรับใช้เนื้อหาในเวอร์ชันวันหยุดพิเศษหรือกิจกรรมที่เกี่ยวข้องกับกิจกรรม)
บูรณาการกับเครื่องมือสำหรับนักพัฒนา คุณสามารถสร้างตัวเลือกในเครื่องมือเพื่อปรับใช้โปรเจ็กต์เว็บแอปกับโฮสติ้ง Firebase ได้ด้วยการคลิกเพียงครั้งเดียว (เช่น คลิกปุ่มปรับใช้ภายใน IDE)
ปรับใช้อัตโนมัติเมื่อมีการสร้างเนื้อหาคงที่ เมื่อกระบวนการสร้างเนื้อหาสแตติกโดยทางโปรแกรม (เช่น เนื้อหาที่ผู้ใช้สร้างขึ้น เช่น วิกิหรือบทความข่าว) คุณสามารถปรับใช้เนื้อหาที่สร้างขึ้นเป็นไฟล์สแตติกแทนที่จะให้บริการแบบไดนามิก ซึ่งจะช่วยประหยัดพลังงานในการประมวลผลที่มีราคาแพงและให้บริการไฟล์ของคุณในรูปแบบที่ปรับขนาดได้มากขึ้น
ในขั้นแรกคู่มือนี้จะอธิบายวิธีการเปิดใช้งาน ตรวจสอบสิทธิ์ และอนุญาต API จากนั้น คู่มือนี้จะอธิบายตัวอย่างเพื่อสร้างเวอร์ชันโฮสติ้งของ Firebase เพื่ออัปโหลดไฟล์ที่จำเป็นไปยังเวอร์ชัน และสุดท้ายคือการปรับใช้เวอร์ชัน
คุณยังสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ REST API นี้ได้จาก เอกสารอ้างอิง Hosting REST API ฉบับเต็ม
ก่อนที่คุณจะเริ่มต้น: เปิดใช้งาน REST API
คุณต้องเปิดใช้งาน Firebase Hosting REST API ในคอนโซล Google APIs:
เปิด หน้า Firebase Hosting API ในคอนโซล Google API
เมื่อได้รับแจ้ง ให้เลือกโปรเจ็กต์ Firebase ของคุณ
คลิก เปิดใช้งาน ในหน้า Firebase Hosting API
ขั้นตอนที่ 1: รับโทเค็นการเข้าถึงเพื่อตรวจสอบสิทธิ์และอนุญาตคำขอ API
โปรเจ็กต์ Firebase รองรับ บัญชีบริการ ของ Google ซึ่งคุณสามารถใช้เรียก API ของเซิร์ฟเวอร์ Firebase จากเซิร์ฟเวอร์แอปของคุณหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณกำลังพัฒนาโค้ดในเครื่องหรือปรับใช้แอปพลิเคชันภายในองค์กร คุณสามารถใช้ข้อมูลประจำตัวที่ได้รับผ่านบัญชีบริการนี้เพื่ออนุญาตคำขอของเซิร์ฟเวอร์ได้
หากต้องการตรวจสอบสิทธิ์บัญชีบริการและอนุญาตให้เข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON
หากต้องการสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการของคุณ:
ในคอนโซล Firebase ให้เปิด การตั้งค่า > บัญชีบริการ
คลิก สร้างคีย์ส่วนตัวใหม่ จากนั้นยืนยันโดยคลิก สร้างคีย์ส่วนตัว
จัดเก็บไฟล์ JSON ที่มีคีย์อย่างปลอดภัย
ใช้ข้อมูลรับรอง Firebase ของคุณร่วมกับ Google Auth Library สำหรับภาษาที่คุณต้องการเพื่อดึงโทเค็นการเข้าถึง 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
หลาม
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
ชวา
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: ตรวจสอบให้แน่ใจว่าโครงการของคุณมีไซต์โฮสติ้งเริ่มต้น
ก่อนที่คุณจะปรับใช้กับ Firebase Hosting เป็นครั้งแรก โปรเจ็กต์ Firebase ของคุณต้องมี Hosting SITE
เริ่มต้น
ตรวจสอบว่าโปรเจ็กต์ของคุณมีไซต์โฮสติ้งเริ่มต้นอยู่แล้วหรือไม่โดยเรียกจุดสิ้นสุด
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"
แสดงว่าโปรเจ็กต์ของคุณมีไซต์โฮสติ้งเริ่มต้นอยู่แล้ว ข้ามส่วนที่เหลือของขั้นตอนนี้ และไปยังขั้นตอนถัดไป: สร้างเวอร์ชันใหม่สำหรับไซต์ของคุณหากคุณได้รับอาร์เรย์ว่าง แสดงว่าคุณไม่มีไซต์โฮสติ้งเริ่มต้น ดำเนินการส่วนที่เหลือของขั้นตอนนี้ให้เสร็จสิ้น
ตัดสินใจเลือก
SITE_ID
สำหรับไซต์โฮสติ้งเริ่มต้นของคุณ โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อตัดสินใจเลือกSITE_ID
นี้ :SITE_ID
นี้ใช้เพื่อสร้างโดเมนย่อย Firebase เริ่มต้นของคุณ:SITE_ID .web.app
และSITE_ID .firebaseapp.com
SITE_ID
มีข้อกำหนดดังต่อไปนี้:- ต้องเป็นป้ายกำกับชื่อโฮสต์ที่ถูกต้อง ซึ่งหมายความว่าต้องไม่มี
.
,_
ฯลฯ - ต้องมีอักขระไม่เกิน 30 ตัว
- ต้องไม่ซ้ำกันทั่วโลกภายใน Firebase
- ต้องเป็นป้ายกำกับชื่อโฮสต์ที่ถูกต้อง ซึ่งหมายความว่าต้องไม่มี
โปรดทราบว่าเรามักจะแนะนำให้ใช้รหัสโครงการของคุณเป็น
SITE_ID
สำหรับไซต์โฮสติ้งเริ่มต้นของคุณ เรียนรู้วิธีค้นหารหัสนี้ใน ทำความเข้าใจโปรเจ็กต์ Firebaseสร้างไซต์โฮสติ้งเริ่มต้นของคุณโดยการเรียก
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 สำหรับไซต์ที่คุณต้องการปรับใช้
เรียกใช้ เวอร์ชันสร้าง ปลายทางโดยใช้ 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 ว่าไฟล์ใดที่คุณต้องการปรับใช้ในเวอร์ชันใหม่นี้ในที่สุด
โปรดทราบว่าโฮสติ้งจำกัดขนาดสูงสุดไว้ที่ 2 GB สำหรับแต่ละไฟล์
API นี้กำหนดให้คุณระบุไฟล์ด้วยแฮช SHA256 ดังนั้น ก่อนที่คุณจะสามารถทำการเรียก API ได้ คุณจะต้องคำนวณแฮชสำหรับไฟล์คงที่แต่ละไฟล์ก่อนโดย Gzipping ไฟล์ จากนั้นรับแฮช SHA256 ของไฟล์ที่บีบอัดใหม่แต่ละไฟล์
ดำเนินการต่อจากตัวอย่างของเรา สมมติว่าคุณต้องการปรับใช้สามไฟล์ในเวอร์ชันใหม่: file1
, file2
และ file3
Gzip ไฟล์:
gzip file1 && gzip file2 && gzip file3
ตอนนี้คุณมีไฟล์บีบอัดสามไฟล์
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 สามไฟล์จากไฟล์บีบอัดทั้งสามไฟล์
ส่งแฮชทั้งสามนี้ในคำขอ 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
ได้รับการอัปโหลดแล้วในเวอร์ชันก่อนหน้า ดังนั้นแฮชของไฟล์จึงไม่รวมอยู่ในรายการuploadRequiredHashes
uploadUrl
ที่เฉพาะเจาะจงสำหรับเวอร์ชันใหม่
ในขั้นตอนถัดไปเพื่ออัปโหลดไฟล์ใหม่สองไฟล์ คุณจะต้องมีแฮชและ 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
ลีสของคุณซึ่งมีการกำหนดค่าโฮสติ้งและไฟล์เนื้อหาทั้งหมดสำหรับเวอร์ชันใหม่ของคุณ
เรียกปลายทาง 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/file1
-
https:// SITE_ID .web.app/file2
-
https:// SITE_ID .web.app/file3
ไฟล์เหล่านี้ยังสามารถเข้าถึงได้จาก URL ที่เชื่อมโยงกับโดเมน SITE_ID .firebaseapp.com
ของคุณ
คุณยังสามารถดูรุ่นใหม่ของคุณแสดงอยู่ใน แดชบอร์ดโฮสติ้ง ของคอนโซล Firebase