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 ที่มีอายุสั้น
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: ตรวจสอบว่าโปรเจ็กต์มีเว็บไซต์ Hosting เริ่มต้น
ก่อนการติดตั้งใช้งานครั้งแรกใน Firebase Hosting โปรเจ็กต์ Firebase ต้องมีHosting SITE
เริ่มต้น
ตรวจสอบว่าโปรเจ็กต์มีHostingเริ่มต้นอยู่แล้วหรือไม่โดยเรียกใช้ปลายทาง
sites.list
เช่น
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer
ACCESS_TOKEN " \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID /sitesHost: firebasehosting.googleapis.com POST /v1beta1/projects/
PROJECT_ID /sites HTTP/1.1 Authorization: BearerACCESS_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 -H "Content-Type: application/json" \ -H "Authorization: Bearer
ACCESS_TOKEN " \ https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID /sites?siteId=SITE_ID Host: firebasehosting.googleapis.com POST /v1beta1/projects/
PROJECT_ID /sites?siteId=SITE_ID Authorization: BearerACCESS_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 -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 /versionsHost: firebasehosting.googleapis.com POST /v1beta1/sites/
SITE_ID /versions HTTP/1.1 Authorization: BearerACCESS_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 -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 :populateFilesHost: firebasehosting.googleapis.com POST /v1beta1/sites/
SITE_ID /versions/VERSION_ID :populateFiles HTTP/1.1 Authorization: BearerACCESS_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
จึงไม่ได้รวมอยู่ในรายการ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 -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 Host: upload-firebasehosting.googleapis.com POST /upload/sites/
SITE_ID /versions/VERSION_ID /files/FILE_HASH HTTP/1.1 Authorization: BearerACCESS_TOKEN Content-Type: application/octet-stream Content-Length: 500content-of-file2.gz
การอัปโหลดที่สำเร็จจะแสดง200 OK
การตอบกลับ HTTPS
ขั้นตอนที่ 6: อัปเดตสถานะของเวอร์ชันเป็น FINALIZED
หลังจากอัปโหลดไฟล์ทั้งหมดที่แสดงในversions.populateFiles
คำตอบแล้ว คุณจะอัปเดตสถานะของเวอร์ชันเป็นFINALIZED
ได้
เรียกใช้ปลายทาง versions.patch
โดยตั้งค่าฟิลด์ status
ในคำขอ API เป็น FINALIZED
เช่น
curl -H "Content-Type: application/json" \ -H "Authorization: BearerACCESS_TOKEN " \ -X PATCH \ -d '{"status": "FINALIZED"}' \ https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID /versions/VERSION_ID ?update_mask=status
Host: firebasehosting.googleapis.com PATCH /v1beta1/sites/SITE_ID /versions/VERSION_ID ?update_mask=status HTTP/1.1 Authorization: BearerACCESS_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 -H "Authorization: BearerACCESS_TOKEN " \ -X POST https://firebasehosting.googleapis.com/v1beta1/sites/SITE_ID /releases?versionName=sites/SITE_ID /versions/VERSION_ID
Host: firebasehosting.googleapis.com POST /v1beta1/sites/SITE_ID /releases?versionName=sites/SITE_ID /versions/VERSION_ID HTTP/1.1 Authorization: BearerACCESS_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 ได้ด้วย