ทำให้ใช้งานได้ในเว็บไซต์โดยใช้ Hosting REST API

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 โดยทำดังนี้

  1. เปิดหน้า API ของ Firebase Hosting ในคอนโซล Google APIs

  2. เมื่อได้รับข้อความแจ้ง ให้เลือกโปรเจ็กต์ Firebase

  3. คลิกเปิดใช้ในหน้า Firebase Hosting API

ขั้นตอนที่ 1: รับโทเค็นการเข้าถึงเพื่อตรวจสอบสิทธิ์และให้สิทธิ์คำขอ API

โปรเจ็กต์ Firebase รองรับบัญชีบริการของ Google ซึ่งคุณใช้เรียก API ของเซิร์ฟเวอร์ Firebase จากเซิร์ฟเวอร์แอปหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณกำลังพัฒนาโค้ดในเครื่องหรือติดตั้งใช้งานแอปพลิเคชันในองค์กร คุณสามารถใช้ข้อมูลเข้าสู่ระบบที่ได้รับผ่านบัญชีบริการนี้เพื่อให้สิทธิ์คำขอของเซิร์ฟเวอร์

หากต้องการตรวจสอบสิทธิ์บัญชีบริการและให้สิทธิ์บัญชีดังกล่าว เพื่อเข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON

วิธีสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการ

  1. ในคอนโซล Firebase ให้เปิด การตั้งค่า > บัญชีบริการ

  2. คลิกสร้างคีย์ส่วนตัวใหม่ แล้วยืนยันโดยคลิกสร้างคีย์

  3. จัดเก็บไฟล์ 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 เริ่มต้น

  1. ตรวจสอบว่าโปรเจ็กต์มี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 เว็บไซต์เริ่มต้น ทำตามขั้นตอนที่เหลือให้เสร็จสมบูรณ์

  2. กำหนด SITE_ID สำหรับเว็บไซต์ Hosting เริ่มต้น โปรดคำนึงถึงสิ่งต่อไปนี้เมื่อตัดสินใจเลือกSITE_ID

    • SITE_IDนี้ใช้เพื่อสร้างโดเมนย่อย Firebase เริ่มต้น
      SITE_ID.web.app และ SITE_ID.firebaseapp.com

    • SITE_ID ต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้

      • ต้องเป็นป้ายกำกับชื่อโฮสต์ที่ถูกต้อง ซึ่งหมายความว่าต้องไม่มี ., _ ฯลฯ
      • ต้องมีความยาวไม่เกิน 30 อักขระ
      • ต้องไม่ซ้ำกันทั่วโลกภายใน Firebase

    โปรดทราบว่าเรามักจะแนะนำให้ใช้รหัสโปรเจ็กต์เป็น SITE_ID สำหรับเว็บไซต์ Hosting เริ่มต้น ดูวิธีค้นหารหัสนี้ได้ในหัวข้อทำความเข้าใจโปรเจ็กต์ Firebase

  3. สร้างเว็บไซต์ 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 ใหม่สำหรับเว็บไซต์ ในภายหลังของคู่มือนี้ คุณจะอัปโหลดไฟล์ไปยังเวอร์ชันนี้ แล้วจึงติดตั้งใช้งานในเว็บไซต์

  1. กำหนด SITE_ID สำหรับเว็บไซต์ที่คุณต้องการติดตั้งใช้งาน

  2. เรียกใช้ปลายทาง 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

  1. บีบอัดไฟล์ด้วย Gzip โดยใช้คำสั่งต่อไปนี้

    gzip file1 && gzip file2 && gzip file3

    ตอนนี้คุณมีไฟล์บีบอัด 3 ไฟล์ ได้แก่ file1.gz, file2.gz และ file3.gz

  2. รับแฮช 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. ส่งแฮชทั้ง 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 จากขั้นตอนก่อนหน้า

  1. ต่อท้าย เครื่องหมายทับและแฮชของไฟล์ไปยัง uploadUrl เพื่อ สร้าง URL เฉพาะไฟล์ในรูปแบบ https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH

  2. อัปโหลดไฟล์ที่จำเป็นทั้งหมดทีละไฟล์ (ในตัวอย่างนี้ มีเพียง 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โดเมน

นอกจากนี้ คุณยังดูผลงานใหม่ที่แสดงใน แดชบอร์ด Hosting ของคอนโซล Firebase ได้ด้วย