Firebase Hosting REST API की मदद से, Firebase होस्टिंग वाली साइटों पर प्रोग्राम के हिसाब से और अपनी पसंद के मुताबिक डिप्लॉयमेंट किए जा सकते हैं. नए या अपडेट किए गए Hosting कॉन्टेंट और कॉन्फ़िगरेशन को डिप्लॉय करने के लिए, इस REST API का इस्तेमाल करें.
डप्लॉयमेंट के लिए, Firebase CLI का इस्तेमाल करने के बजाय, Firebase Hosting REST API का इस्तेमाल किया जा सकता है. इससे प्रोग्राम के ज़रिए अपनी साइट के लिए ऐसेट का नया version
बनाया जा सकता है. साथ ही, वर्शन में फ़ाइलें अपलोड की जा सकती हैं. इसके बाद, वर्शन को अपनी साइट पर डिप्लॉय किया जा सकता है.
उदाहरण के लिए, Firebase Hosting REST API की मदद से ये काम किए जा सकते हैं:
डिप्लॉयमेंट शेड्यूल करें. क्रॉन जॉब के साथ REST API का इस्तेमाल करके, Firebase होस्टिंग पर मौजूद कॉन्टेंट को नियमित तौर पर बदला जा सकता है. उदाहरण के लिए, छुट्टियों या इवेंट से जुड़ा कॉन्टेंट डिप्लॉय करने के लिए.
डेवलपर टूल के साथ इंटिग्रेट करें. अपने टूल में एक ऐसा विकल्प बनाया जा सकता है जिसकी मदद से, वेब ऐप्लिकेशन प्रोजेक्ट को सिर्फ़ एक क्लिक में Firebase Hosting पर डिप्लॉय किया जा सके. उदाहरण के लिए, IDE में डिप्लॉय बटन पर क्लिक करना.
स्टैटिक कॉन्टेंट जनरेट होने पर, डिप्लॉयमेंट को अपने-आप शुरू होने की सुविधा. जब कोई प्रोसेस, प्रोग्राम के हिसाब से स्टैटिक कॉन्टेंट जनरेट करती है (उदाहरण के लिए, यूज़र जनरेटेड कॉन्टेंट, जैसे कि विकी या समाचार लेख), तो जनरेट किए गए कॉन्टेंट को डाइनैमिक तरीके से दिखाने के बजाय, स्टैटिक फ़ाइलों के तौर पर डिप्लॉय किया जा सकता है. इससे आपको महंगे कंप्यूटिंग संसाधनों की ज़रूरत नहीं पड़ती. साथ ही, आपकी फ़ाइलों को ज़्यादा बेहतर तरीके से मैनेज किया जा सकता है.
इस गाइड में सबसे पहले, एपीआई को चालू करने, पुष्टि करने, और अनुमति देने का तरीका बताया गया है. इसके बाद, इस गाइड में Firebase Hosting वर्शन बनाने, वर्शन में ज़रूरी फ़ाइलें अपलोड करने, और आखिर में वर्शन को डिप्लॉय करने का तरीका बताया गया है.
इस REST API के बारे में ज़्यादा जानने के लिए, पूरे Hosting REST API का रेफ़रंस दस्तावेज़ पढ़ें.
शुरू करने से पहले: REST API चालू करना
आपको Google API (एपीआई) कंसोल में Firebase Hosting REST API चालू करना होगा:
Google API कंसोल में, Firebase Hosting एपीआई पेज खोलें.
जब कहा जाए, तब अपना Firebase प्रोजेक्ट चुनें.
Firebase Hosting एपीआई पेज पर, चालू करें पर क्लिक करें.
पहला चरण: एपीआई के अनुरोधों की पुष्टि करने और उन्हें अनुमति देने के लिए, ऐक्सेस टोकन पाना
Firebase प्रोजेक्ट, Google के सेवा खातों के साथ काम करते हैं. इनका इस्तेमाल करके, अपने ऐप्लिकेशन सर्वर या भरोसेमंद एनवायरमेंट से Firebase सर्वर एपीआई को कॉल किया जा सकता है. अगर आपको कोड को स्थानीय तौर पर डेवलप करना है या ऐप्लिकेशन को ऑन-प्रिमाइसेस पर डिप्लॉय करना है, तो सर्वर के अनुरोधों को अनुमति देने के लिए, इस सेवा खाते से मिले क्रेडेंशियल का इस्तेमाल किया जा सकता है.
किसी सेवा खाते को प्रमाणित करने और उसे Firebase की सेवाओं को ऐक्सेस करने की अनुमति देने के लिए, आपको JSON फ़ॉर्मैट में एक निजी कुंजी फ़ाइल जनरेट करनी होगी.
अपने सेवा खाते के लिए निजी पासकोड फ़ाइल जनरेट करने के लिए:
Firebase कंसोल में, सेटिंग > सेवा खाते खोलें.
नई निजी कुंजी जनरेट करें पर क्लिक करें. इसके बाद, कुंजी जनरेट करें पर क्लिक करके पुष्टि करें.
कुंजी वाली JSON फ़ाइल को सुरक्षित तरीके से सेव करें.
कम समय के लिए मान्य OAuth 2.0 ऐक्सेस टोकन पाने के लिए, अपनी पसंद की भाषा के लिए Google Auth Library के साथ-साथ अपने Firebase क्रेडेंशियल का इस्तेमाल करें:
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(); }
ऐक्सेस टोकन की समयसीमा खत्म होने के बाद, अपडेट किया गया ऐक्सेस टोकन पाने के लिए, टोकन रीफ़्रेश करने का तरीका अपने-आप कॉल हो जाता है.
इनमें अलग-अलग OAuth फ़्लो के बारे में बताया गया है. इनकी मदद से, Firebase Hosting REST API का इस्तेमाल करने की अनुमति पाई जा सकती है.दूसरा चरण: पक्का करें कि आपके प्रोजेक्ट में डिफ़ॉल्ट Hosting साइट हो
Firebase Hosting पर पहली बार डिप्लॉय करने से पहले, आपके Firebase प्रोजेक्ट में डिफ़ॉल्ट Hosting SITE
होना चाहिए.
sites.list
एंडपॉइंट को कॉल करके देखें कि आपके प्रोजेक्ट में पहले से कोई डिफ़ॉल्ट Hosting साइट तो नहीं है.उदाहरण के लिए:
cURL कमांड
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साइट नहीं है. इस चरण के बाकी हिस्से को पूरा करें.
अपनी डिफ़ॉल्ट Hosting साइट के लिए
SITE_ID
तय करें. इसSITE_ID
को तय करते समय, इन बातों का ध्यान रखें:इस
SITE_ID
का इस्तेमाल, आपके डिफ़ॉल्ट Firebase सबडोमेन बनाने के लिए किया जाता है:
औरSITE_ID.web.app
.SITE_ID.firebaseapp.com
SITE_ID
के लिए ये ज़रूरी शर्तें पूरी करनी होती हैं:- यह एक मान्य होस्टनेम लेबल होना चाहिए. इसका मतलब है कि इसमें
.
,_
वगैरह नहीं हो सकते. - इसमें 30 या इससे कम वर्ण होने चाहिए
- Firebase में यह आईडी ग्लोबल लेवल पर यूनीक होना चाहिए
- यह एक मान्य होस्टनेम लेबल होना चाहिए. इसका मतलब है कि इसमें
ध्यान दें कि हम अक्सर आपकी डिफ़ॉल्ट Hosting साइट के लिए, आपके प्रोजेक्ट आईडी को
SITE_ID
के तौर पर इस्तेमाल करने का सुझाव देते हैं. Firebase प्रोजेक्ट के बारे में जानकारी लेख में, इस आईडी को ढूंढने का तरीका जानें.अपनी डिफ़ॉल्ट 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
रॉ एचटीटीपीएस अनुरोध
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" }
तीसरा चरण: अपनी साइट के लिए नया वर्शन बनाना
पहला एपीआई कॉल, आपकी साइट के लिए नया Version
बनाने के लिए होता है.
इस गाइड में आगे, आपको इस वर्शन में फ़ाइलें अपलोड करनी होंगी. इसके बाद, इसे अपनी साइट पर डिप्लॉय करना होगा.
उस साइट के लिए SITE_ID तय करें जिस पर आपको डिप्लॉय करना है.
कॉल में अपने SITE_ID का इस्तेमाल करके, versions.create एंडपॉइंट को कॉल करें.
(ज़रूरी नहीं) कॉल में, 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
रॉ एचटीटीपीएस अनुरोध
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
को किए गए इस एपीआई कॉल से, यह 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
. इस गाइड में, इस खास वर्शन का रेफ़रंस देने के लिए, आपको इस यूनीक आइडेंटिफ़ायर की ज़रूरत होगी.
चौथा चरण: उन फ़ाइलों की सूची तय करना जिन्हें आपको डिप्लॉय करना है
अब आपके पास नए वर्शन का आइडेंटिफ़ायर है. आपको Firebase Hosting को यह बताना होगा कि आपको इस नए वर्शन में कौनसी फ़ाइलें डिप्लॉय करनी हैं.
ध्यान दें कि Hosting में, हर फ़ाइल का ज़्यादा से ज़्यादा साइज़ 2 जीबी हो सकता है.
इस एपीआई के लिए, आपको फ़ाइलों की पहचान SHA256 हैश से करनी होगी. इसलिए, एपीआई कॉल करने से पहले, आपको हर स्टैटिक फ़ाइल के लिए हैश कैलकुलेट करना होगा. इसके लिए, फ़ाइलों को Gzip करें. इसके बाद, हर नई कंप्रेस की गई फ़ाइल का SHA256 हैश लें.
उदाहरण के तौर पर, मान लें कि आपको नए वर्शन में तीन फ़ाइलें डिप्लॉय करनी हैं: file1
, file2
, और file3
.
फ़ाइलों को gzip करें:
gzip file1 && gzip file2 && gzip file3
अब आपके पास तीन कंप्रेस की गई फ़ाइलें हैं:
file1.gz
,file2.gz
, औरfile3.gz
.कंप्रेस की गई हर फ़ाइल का SHA256 हैश पाएं:
cat file1.gz | openssl dgst -sha256 66d61f86bb684d0e35f94461c1f9cf4f07a4bb3407bfbd80e518bd44368ff8f4
cat file2.gz | openssl dgst -sha256 490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083
cat file3.gz | openssl dgst -sha256 59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315
अब आपके पास कंप्रेस की गई तीनों फ़ाइलों के SHA256 हैश हैं.
इन तीनों हैश को
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
एचटीटीपीएस अनुरोध का रॉ डेटा
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
को किए गए इस एपीआई कॉल से, यह JSON मिलता है:
{ "uploadRequiredHashes": [ "490423ebae5dcd6c2df695aea79f1f80555c62e535a2808c8115a6714863d083", "59cae17473d7dd339fe714f4c6c514ab4470757a4fe616dfdb4d81400addf315" ], "uploadUrl": "https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files" }
इस जवाब में ये शामिल हैं:
अपलोड की जाने वाली हर फ़ाइल का हैश. उदाहरण के लिए, इस उदाहरण में
file1
को पहले ही किसी पिछले वर्शन में अपलोड किया जा चुका है. इसलिए, इसका हैशuploadRequiredHashes
सूची में शामिल नहीं है.uploadUrl
, जो नए वर्शन के लिए खास है.
दो नई फ़ाइलें अपलोड करने के लिए, आपको हैश और uploadURL
की ज़रूरत होगी. ये आपको versions.populateFiles
के जवाब में मिलेंगे.
पांचवां चरण: ज़रूरी फ़ाइलें अपलोड करना
आपको हर ज़रूरी फ़ाइल को अलग-अलग अपलोड करना होगा. ये वे फ़ाइलें हैं जो पिछले चरण में versions.populateFiles
के जवाब में uploadRequiredHashes
में दी गई हैं. इन फ़ाइलों को अपलोड करने के लिए, आपको फ़ाइल हैश और पिछले चरण में मिले uploadUrl
की ज़रूरत होगी.
uploadUrl
में फ़ॉरवर्ड स्लैश और फ़ाइल का हैश जोड़कर, फ़ाइल के हिसाब से यूआरएल बनाएं. इसका फ़ॉर्मैट यह होगा:https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID/versions/VERSION_ID/files/FILE_HASH
.अनुरोधों की सीरीज़ का इस्तेमाल करके, फ़ाइल के हिसाब से यूआरएल पर एक-एक करके सभी ज़रूरी फ़ाइलें अपलोड करें. इस उदाहरण में, सिर्फ़
file2.gz
औरfile3.gz
.उदाहरण के लिए, कंप्रेस की गई
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
एचटीटीपीएस अनुरोध का रॉ डेटा
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
एचटीटीपीएस रिस्पॉन्स मिलता है.
छठा चरण: वर्शन के स्टेटस को FINALIZED के तौर पर अपडेट करें
versions.populateFiles
जवाब में दी गई सभी फ़ाइलें अपलोड करने के बाद, अपने वर्शन का स्टेटस FINALIZED
पर अपडेट किया जा सकता है.
अपने एपीआई अनुरोध में status
फ़ील्ड को FINALIZED
पर सेट करके, versions.patch
एंडपॉइंट को कॉल करें.
उदाहरण के लिए:
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
एचटीटीपीएस अनुरोध का रॉ डेटा
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
को किए गए इस एपीआई कॉल से, यहां दिया गया 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" }
सातवां चरण: वर्शन को डिप्लॉय करने के लिए रिलीज़ करना
अब जब आपके पास फ़ाइनल वर्शन है, तो इसे डिप्लॉय करने के लिए रिलीज़ करें. इस चरण के लिए, आपको अपने वर्शन का 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
एचटीटीपीएस अनुरोध का रॉ डेटा
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
डोमेन से जुड़े यूआरएल पर भी ऐक्सेस किया जा सकता है.
आपको Firebase कंसोल के Hosting डैशबोर्ड में भी अपनी नई रिलीज़ दिख सकती है.