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