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

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:

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

  2. เมื่อมีข้อความแจ้ง ให้เลือกโปรเจ็กต์ Firebase ของคุณ

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

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

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

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

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

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

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

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

  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 ได้ คุณจะต้องคำนวณแฮชสำหรับไฟล์แบบคงที่แต่ละไฟล์โดยการบีบอัดไฟล์ จากนั้นนำแฮช 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

การอัปโหลดที่สำเร็จจะแสดงการตอบกลับ 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 ได้ด้วย