होस्टिंग REST API का उपयोग करके अपनी साइट पर तैनात करें

फायरबेस होस्टिंग REST API आपके फायरबेस-होस्टेड साइटों पर प्रोग्रामेटिक और अनुकूलन योग्य तैनाती को सक्षम बनाता है। नई या अद्यतन होस्टिंग सामग्री और कॉन्फ़िगरेशन को तैनात करने के लिए इस REST API का उपयोग करें।

तैनाती के लिए फायरबेस सीएलआई का उपयोग करने के विकल्प के रूप में, आप अपनी साइट के लिए प्रोग्रामेटिक रूप से संपत्तियों का एक नया version बनाने, संस्करण में फ़ाइलें अपलोड करने, फिर संस्करण को अपनी साइट पर तैनात करने के लिए फायरबेस होस्टिंग आरईएसटी एपीआई का उपयोग कर सकते हैं।

उदाहरण के लिए, फायरबेस होस्टिंग REST API के साथ, आप यह कर सकते हैं:

  • शेड्यूल तैनात है. क्रॉन जॉब के साथ REST API का उपयोग करके, आप नियमित शेड्यूल पर फायरबेस-होस्ट की गई सामग्री को बदल सकते हैं (उदाहरण के लिए, अपनी सामग्री का एक विशेष अवकाश या ईवेंट-संबंधित संस्करण तैनात करने के लिए)।

  • डेवलपर टूल के साथ एकीकृत करें. आप केवल एक क्लिक का उपयोग करके अपने वेब ऐप प्रोजेक्ट्स को फायरबेस होस्टिंग पर तैनात करने के लिए अपने टूल में एक विकल्प बना सकते हैं (उदाहरण के लिए, एक आईडीई के भीतर एक तैनाती बटन पर क्लिक करना)।

  • स्थैतिक सामग्री उत्पन्न होने पर स्वचालित तैनाती। जब कोई प्रक्रिया स्थिर सामग्री को प्रोग्रामेटिक रूप से उत्पन्न करती है (उदाहरण के लिए, उपयोगकर्ता-जनित सामग्री जैसे कि विकी या समाचार लेख), तो आप जेनरेट की गई सामग्री को गतिशील रूप से परोसने के बजाय स्थिर फ़ाइलों के रूप में तैनात कर सकते हैं। यह आपकी महंगी गणना शक्ति बचाता है और आपकी फ़ाइलों को अधिक स्केलेबल तरीके से प्रस्तुत करता है।

यह मार्गदर्शिका सबसे पहले बताती है कि एपीआई को कैसे सक्षम, प्रमाणित और अधिकृत किया जाए। फिर यह मार्गदर्शिका फ़ायरबेस होस्टिंग संस्करण बनाने, संस्करण में आवश्यक फ़ाइलें अपलोड करने, फिर अंत में संस्करण को तैनात करने के लिए एक उदाहरण के माध्यम से चलती है।

आप संपूर्ण होस्टिंग REST API संदर्भ दस्तावेज़ में इस REST API के बारे में अधिक जान सकते हैं।

शुरू करने से पहले: REST API सक्षम करें

आपको Google API कंसोल में फ़ायरबेस होस्टिंग REST API सक्षम करना होगा:

  1. Google API कंसोल में Firebase होस्टिंग API पृष्ठ खोलें।

  2. संकेत मिलने पर, अपना फायरबेस प्रोजेक्ट चुनें।

  3. फायरबेस होस्टिंग एपीआई पेज पर सक्षम करें पर क्लिक करें।

चरण 1: एपीआई अनुरोधों को प्रमाणित और अधिकृत करने के लिए एक एक्सेस टोकन प्राप्त करें

फायरबेस प्रोजेक्ट Google सेवा खातों का समर्थन करते हैं, जिनका उपयोग आप अपने ऐप सर्वर या विश्वसनीय वातावरण से फायरबेस सर्वर एपीआई को कॉल करने के लिए कर सकते हैं। यदि आप स्थानीय रूप से कोड विकसित कर रहे हैं या अपने एप्लिकेशन को ऑन-प्रिमाइसेस तैनात कर रहे हैं, तो आप सर्वर अनुरोधों को अधिकृत करने के लिए इस सेवा खाते के माध्यम से प्राप्त क्रेडेंशियल्स का उपयोग कर सकते हैं।

किसी सेवा खाते को प्रमाणित करने और उसे फायरबेस सेवाओं तक पहुंचने के लिए अधिकृत करने के लिए, आपको JSON प्रारूप में एक निजी कुंजी फ़ाइल उत्पन्न करनी होगी।

अपने सेवा खाते के लिए एक निजी कुंजी फ़ाइल बनाने के लिए:

  1. फायरबेस कंसोल में, सेटिंग्स > सेवा खाते खोलें।

  2. नई निजी कुंजी जनरेट करें पर क्लिक करें, फिर कुंजी जेनरेट करें पर क्लिक करके पुष्टि करें।

  3. कुंजी वाली JSON फ़ाइल को सुरक्षित रूप से संग्रहीत करें।

अल्पकालिक OAuth 2.0 एक्सेस टोकन प्राप्त करने के लिए अपनी पसंदीदा भाषा के लिए Google Auth लाइब्रेरी के साथ अपने Firebase क्रेडेंशियल का उपयोग करें:

नोड.जे.एस

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: सुनिश्चित करें कि आपके प्रोजेक्ट में एक डिफ़ॉल्ट होस्टिंग साइट है

फ़ायरबेस होस्टिंग पर आपकी पहली तैनाती से पहले, आपके फ़ायरबेस प्रोजेक्ट में एक डिफ़ॉल्ट होस्टिंग SITE होनी चाहिए।

  1. sites.list एंडपॉइंट पर कॉल करके जांचें कि क्या आपके प्रोजेक्ट में पहले से ही एक डिफ़ॉल्ट होस्टिंग साइट है।

    उदाहरण के लिए:

    कर्ल कमांड

    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 उपयोग आपके डिफ़ॉल्ट फ़ायरबेस उपडोमेन बनाने के लिए किया जाता है:
      SITE_ID .web.app और SITE_ID .firebaseapp.com .

    • SITE_ID निम्नलिखित आवश्यकताएँ हैं:

      • एक वैध होस्टनाम लेबल होना चाहिए, जिसका अर्थ है कि इसमें शामिल नहीं हो सकता . , _ , वगैरह।
      • 30 अक्षर या उससे कम होना चाहिए
      • फायरबेस के भीतर विश्व स्तर पर अद्वितीय होना चाहिए

    ध्यान दें कि हम अक्सर आपकी डिफ़ॉल्ट होस्टिंग साइट के लिए SITE_ID के रूप में आपकी प्रोजेक्ट आईडी का उपयोग करने की अनुशंसा करते हैं। जानें कि अंडरस्टैंड फायरबेस प्रोजेक्ट्स में इस आईडी को कैसे ढूंढें।

  3. siteId पैरामीटर के रूप में अपने इच्छित SITE_ID का उपयोग करके sites.create कॉल करके अपनी डिफ़ॉल्ट होस्टिंग साइट बनाएं।

    उदाहरण के लिए:

    कर्ल कमांड

    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
    

    sites.create पर यह एपीआई कॉल निम्नलिखित JSON लौटाता है:

    {
      "name": "projects/PROJECT_ID/sites/SITE_ID",
      "defaultUrl": "https://SITE_ID.web.app",
      "type": "DEFAULT_SITE"
    }
    

चरण 3: अपनी साइट के लिए एक नया संस्करण बनाएं

आपकी पहली एपीआई कॉल आपकी साइट के लिए एक नया Version बनाना है। बाद में इस गाइड में, आप इस संस्करण में फ़ाइलें अपलोड करेंगे, फिर इसे अपनी साइट पर तैनात करेंगे।

  1. उस साइट के लिए SITE_ID निर्धारित करें जिस पर आप तैनात करना चाहते हैं।

  2. कॉल में अपनी SITE_ID उपयोग करके वर्जन को कॉल करें। एंडपॉइंट बनाएं।

    (वैकल्पिक) आप कॉल में फायरबेस होस्टिंग कॉन्फ़िगरेशन ऑब्जेक्ट भी पास कर सकते हैं, जिसमें एक हेडर सेट करना शामिल है जो एक निर्दिष्ट अवधि के लिए सभी फ़ाइलों को कैश करता है।

    उदाहरण के लिए:

    कर्ल कमांड

    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"
          }
        }]
      }
    }
    

versions.create पर यह API कॉल निम्नलिखित 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: उन फ़ाइलों की सूची निर्दिष्ट करें जिन्हें आप तैनात करना चाहते हैं

अब जब आपके पास अपना नया संस्करण पहचानकर्ता है, तो आपको फायरबेस होस्टिंग को यह बताना होगा कि आप अंततः इस नए संस्करण में कौन सी फ़ाइलें तैनात करना चाहते हैं।

ध्यान दें कि व्यक्तिगत फ़ाइलों के लिए होस्टिंग की अधिकतम आकार सीमा 2 जीबी है।

इस API के लिए आवश्यक है कि आप SHA256 हैश द्वारा फ़ाइलों की पहचान करें। इसलिए, इससे पहले कि आप एपीआई कॉल कर सकें, आपको पहले फ़ाइलों को जीज़िप करके प्रत्येक स्थिर फ़ाइल के लिए हैश की गणना करने की आवश्यकता होगी, फिर प्रत्येक नई संपीड़ित फ़ाइल का SHA256 हैश लेना होगा।

अपने उदाहरण को जारी रखते हुए, मान लें कि आप नए संस्करण में तीन फ़ाइलें तैनात करना चाहते हैं: file1 , file2 , और file3

  1. फ़ाइलों को Gzip करें:

    gzip file1 && gzip file2 && gzip file3

    अब आपके पास तीन संपीड़ित फ़ाइलें 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. इन तीन हैश को 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
    

    कच्चा 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"
      }
    }
    

versions.populateFiles पर यह API कॉल निम्नलिखित JSON लौटाता है:

{
  "uploadRequiredHashes": [
    "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083",
    "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315"
  ],
  "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files"
}

इस प्रतिक्रिया में शामिल हैं:

  • प्रत्येक फ़ाइल का हैश जिसे अपलोड करने की आवश्यकता है। उदाहरण के लिए, इस उदाहरण में file1 पिछले संस्करण में पहले ही अपलोड किया जा चुका है, इसलिए इसका हैश uploadRequiredHashes सूची में शामिल नहीं है।

  • uploadUrl जो नए संस्करण के लिए विशिष्ट है।

दो नई फ़ाइलें अपलोड करने के अगले चरण में, आपको versions.populateFiles प्रतिक्रिया से हैश और uploadURL की आवश्यकता होगी।

चरण 5: आवश्यक फ़ाइलें अपलोड करें

आपको प्रत्येक आवश्यक फ़ाइल को व्यक्तिगत रूप से अपलोड करने की आवश्यकता है (वे फ़ाइलें जो पिछले चरण में versions.populateFiles प्रतिक्रिया से uploadRequiredHashes में सूचीबद्ध हैं)। इन फ़ाइल अपलोड के लिए, आपको पिछले चरण से फ़ाइल हैश और uploadUrl आवश्यकता होगी।

  1. प्रारूप में फ़ाइल-विशिष्ट यूआरएल बनाने के लिए uploadUrl में एक फॉरवर्ड स्लैश और फ़ाइल का हैश जोड़ें: 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
    

    कच्चा 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: संस्करण की स्थिति को अंतिम रूप में अपडेट करें

versions.populateFiles प्रतिक्रिया में सूचीबद्ध सभी फ़ाइलें अपलोड करने के बाद, आप अपने संस्करण की स्थिति को FINALIZED से अपडेट कर सकते हैं।

अपने एपीआई अनुरोध में status फ़ील्ड को FINALIZED के लिए सेट किए गए versions.patch एंडपॉइंट को कॉल करें।

उदाहरण के लिए:

कर्ल कमांड

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"}

versions.patch पर यह API कॉल निम्नलिखित 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

कच्चा 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

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

ये फ़ाइलें आपके SITE_ID .firebaseapp.com डोमेन से संबद्ध URL पर भी पहुंच योग्य हैं।

आप अपनी नई रिलीज़ को फायरबेस कंसोल के होस्टिंग डैशबोर्ड में भी सूचीबद्ध देख सकते हैं।