פרוס לאתר שלך באמצעות Hosting REST API

Firebase Hosting REST API מאפשר פריסות פרוגרמטיות וניתנות להתאמה אישית לאתרים המתארחים ב-Firebase שלך. השתמש ב-REST API זה כדי לפרוס תוכן ותצורת אירוח חדשים או מעודכנים.

כחלופה לשימוש ב- 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 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 .

פִּיתוֹן

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 Hosting, לפרויקט Firebase שלך ​​חייב להיות SITE אירוח המוגדר כברירת מחדל.

  1. בדוק אם לפרויקט שלך כבר יש אתר אירוח כברירת מחדל על ידי קריאה לנקודת הקצה 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" , אז לפרויקט שלך כבר יש אתר אירוח כברירת מחדל. דלג על המשך שלב זה ועבור לשלב הבא: צור גרסה חדשה עבור האתר שלך .

    • אם אתה מקבל מערך ריק, אז אין לך ברירת מחדל של אתר אירוח. השלם את המשך שלב זה.

  2. החלט על ה- SITE_ID עבור אתר האירוח המוגדר כברירת מחדל. זכור את הדברים הבאים כשאתה מחליט על SITE_ID זה:

    • SITE_ID זה משמש ליצירת תת-דומיינים המוגדרים כברירת מחדל של Firebase:
      SITE_ID .web.app ו SITE_ID .firebaseapp.com .

    • ל- SITE_ID יש את הדרישות הבאות:

      • חייבת להיות תווית שם מארח חוקית, כלומר היא לא יכולה להכיל . , _ , וכו.
      • חייב להכיל 30 תווים או פחות
      • חייב להיות ייחודי עולמי בתוך Firebase

    שים לב שלעתים קרובות אנו ממליצים להשתמש במזהה הפרויקט שלך בתור SITE_ID עבור אתר האירוח המוגדר כברירת מחדל. למד כיצד למצוא את המזהה הזה ב- Search Projects Firebase .

  3. צור את אתר האירוח המוגדר כברירת מחדל על ידי קריאה לנקודת הקצה 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 אילו קבצים ברצונך לפרוס בסופו של דבר בגרסה החדשה הזו.

שים לב שלאירוח יש מגבלת גודל מקסימלית של 2 GB עבור קבצים בודדים.

ממשק API זה מחייב לזהות קבצים באמצעות hash SHA256. לכן, לפני שתוכל לבצע את קריאת ה-API, תחילה תצטרך לחשב hash עבור כל קובץ סטטי על ידי Gzipping של הקבצים ואז לקחת את ה-hash SHA256 של כל קובץ שדחוס לאחרונה.

בהמשך הדוגמה שלנו, נניח שאתה רוצה לפרוס שלושה קבצים בגרסה החדשה: file1 , file2 ו- file3 .

  1. Gzip את הקבצים:

    gzip file1 && gzip file2 && gzip file3

    כעת יש לך שלושה קבצים דחוסים file1.gz , file2.gz ו- file3.gz .

  2. קבל את ה-hash SHA256 של כל קובץ דחוס:

    cat file1.gz | openssl dgst -sha256
    
    66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
    
    cat file2.gz | openssl dgst -sha256
    
    490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
    
    cat file3.gz | openssl dgst -sha256
    
    59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
    

    כעת יש לך את שלושת הגיבובים SHA256 של שלושת הקבצים הדחוסים.

  3. שלח את שלושת הגיבובים האלה בבקשת API לנקודת הקצה versions.populateFiles . רשום כל hash לפי הנתיב הרצוי עבור הקובץ שהועלה (בדוגמה זו, /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"
}

תגובה זו כוללת:

  • ה- hash של כל קובץ שצריך להעלות. לדוגמה, בדוגמה זו file1 כבר הועלה בגרסה קודמת, כך שה-hash שלו אינו כלול ברשימת uploadRequiredHashes .

  • uploadUrl שהיא ספציפית לגרסה החדשה.

בשלב הבא להעלאת שני הקבצים החדשים, תזדקק ל-hash ולכתובת ה- uploadURL מהתגובה versions.populateFiles .

שלב 5: העלה קבצים נדרשים

עליך להעלות בנפרד כל קובץ נדרש (אלה הקבצים הרשומים ב- uploadRequiredHashes מתגובת versions.populateFiles בשלב הקודם). להעלאות קבצים אלו, תזדקק ל-hashs של הקבצים ול- uploadUrl מהשלב הקודם.

  1. הוסף לוכסן קדימה ואת ה-hash של הקובץ ל- 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: עדכן את מצב הגרסה ל-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"
}

כעת יש לפרוס את תצורת האירוח וכל הקבצים עבור הגרסה החדשה באתר שלך, ותוכל לגשת לקבצים שלך באמצעות כתובות האתרים:

  • https:// SITE_ID .web.app/file1
  • https:// SITE_ID .web.app/file2
  • https:// SITE_ID .web.app/file3

קבצים אלה נגישים גם בכתובות URL המשויכות לדומיין SITE_ID .firebaseapp.com שלך.

אתה יכול גם לראות את המהדורה החדשה שלך ברשימה בלוח המחוונים של אירוח של מסוף Firebase.