ทำให้ใช้งานได้ในเว็บไซต์โดยใช้ 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. คลิกเปิดใช้ในหน้า API ของ Firebase Hosting

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

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

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

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

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

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

  3. จัดเก็บไฟล์ JSON ที่มีคีย์อย่างปลอดภัย

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

node.jsPythonJava
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 เริ่มต้น

  1. ตรวจสอบว่าโปรเจ็กต์มีHostingเริ่มต้นอยู่แล้วหรือไม่โดยเรียกใช้ปลายทาง sites.list

    เช่น

    curl -H "Content-Type: application/json" \
           -H "Authorization: Bearer ACCESS_TOKEN" \
    
    https://firebasehosting.googleapis.com/v1beta1/projects/PROJECT_ID/sites
    
    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 -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: 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 -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
    
    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 -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
    
    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 ได้รับการอัปโหลดในเวอร์ชันก่อนหน้าแล้ว ดังนั้นแฮชของ 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 -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: 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 -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
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 -H "Authorization: Bearer ACCESS_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: 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 ได้ด้วย