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