functions.https
का इस्तेमाल करके, एचटीटीपी अनुरोध के ज़रिए फ़ंक्शन को ट्रिगर किया जा सकता है. इससे आपको काम करने वाले इन एचटीटीपी तरीकों का इस्तेमाल करके, सिंक्रोनस फ़ंक्शन शुरू करने की अनुमति मिलती है: GET
, POST
, PUT
, DELETE
, और OPTIONS
.
इस पेज पर दिए गए उदाहरण, सैंपल फ़ंक्शन पर आधारित हैं. यह फ़ंक्शन एंडपॉइंट को एचटीटीपी GET
अनुरोध भेजने पर ट्रिगर होता है. सैंपल फ़ंक्शन, सर्वर का मौजूदा समय हासिल करता है. साथ ही, यूआरएल क्वेरी पैरामीटर में बताए गए तरीके के हिसाब से समय को फ़ॉर्मैट करता है और एचटीटीपी रिस्पॉन्स में नतीजा भेजता है.
एचटीटीपी अनुरोध की मदद से फ़ंक्शन को ट्रिगर करना
एचटीटीपी इवेंट को मैनेज करने वाला फ़ंक्शन बनाने के लिए, functions.https
का इस्तेमाल करें. एचटीटीपी फ़ंक्शन के लिए इवेंट हैंडलर, onRequest()
इवेंट को सुनता है. यह इवेंट, Express वेब फ़्रेमवर्क से मैनेज किए जाने वाले राउटर और ऐप्लिकेशन के साथ काम करता है.
एक्सप्रेस अनुरोध और रिस्पॉन्स ऑब्जेक्ट का इस्तेमाल करना
इसका इस्तेमाल onRequest()
के लिए आर्ग्युमेंट के तौर पर किया जाता है. अनुरोध ऑब्जेक्ट, क्लाइंट के भेजे गए एचटीटीपी अनुरोध की प्रॉपर्टी का ऐक्सेस देता है. साथ ही, रिस्पॉन्स ऑब्जेक्ट, क्लाइंट को जवाब वापस भेजने का तरीका उपलब्ध कराता है.
exports.date = functions.https.onRequest((req, res) => { // ... });
मौजूदा एक्सप्रेस ऐप्लिकेशन का इस्तेमाल करना
onRequest()
के लिए आर्ग्युमेंट के तौर पर App का इस्तेमाल करके, एचटीटीपी फ़ंक्शन में पूरा Express ऐप्लिकेशन पास किया जा सकता है. छोटे-मोटे बदलाव वाले कोड को, मिडलवेयर में ले जाया जा सकता है, जैसा कि यहां दिखाया गया है:
const express = require('express');
const cors = require('cors');
const app = express();
// Automatically allow cross-origin requests
app.use(cors({ origin: true }));
// Add middleware to authenticate requests
app.use(myMiddleware);
// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));
// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);
एचटीटीपी फ़ंक्शन को कॉल करना
एचटीटीपी फ़ंक्शन को डिप्लॉय करने के बाद, उसे अपने यूनीक यूआरएल के ज़रिए शुरू किया जा सकता है. यूआरएल में ये चीज़ें शामिल होती हैं:
- वह इलाका (या इलाके) जहां आपने फ़ंक्शन डिप्लॉय किया है. नेटवर्क के इंतज़ार का समय कम करने के लिए, हो सकता है कि कुछ प्रोडक्शन फ़ंक्शन के लिए जगह को साफ़ तौर पर सेट करना पड़े.
- आपका Firebase प्रोजेक्ट आईडी
cloudfunctions.net
- आपके फ़ंक्शन का नाम
उदाहरण के लिए, date()
शुरू करने का यूआरएल ऐसा दिखेगा:
https://us-central1-<project-id>.cloudfunctions.net/date
अगर फ़ंक्शन डिप्लॉय करते समय आपको अनुमतियों से जुड़ी गड़बड़ियां मिलती हैं, तो पक्का करें कि डिप्लॉयमेंट निर्देश चलाने वाले उपयोगकर्ता को सही IAM भूमिकाएं असाइन की गई हों.
एक्सप्रेस ऐप्लिकेशन रूटिंग की मदद से, आपके तय किए गए ऐप्लिकेशन में यूआरएल पाथ के लिए, फ़ंक्शन का नाम प्रीफ़िक्स के तौर पर जोड़ा जाता है. उदाहरण के लिए, ऊपर दिए गए Express ऐप्लिकेशन के उदाहरण में, गेट्टर को कॉल करने के लिए यूआरएल इस तरह दिखता है:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
अगर फ़ायरवॉल या आईपी फ़िल्टर के पीछे एचटीटीपी फ़ंक्शन का इस्तेमाल किया जाता है, तो उन आईपी पतों को खोजा जा सकता है जिनका इस्तेमाल Google, एचटीटीपी फ़ंक्शन उपलब्ध कराने के लिए करता है.
Cloud Functions के साथ मिडलवेयर मॉड्यूल का इस्तेमाल करना
अगर आपको कुकी के साथ काम करने या CORS जैसी चीज़ों के लिए, मिडलवेयर डिपेंडेंसी इंजेक्ट करनी हैं, तो इन्हें फ़ंक्शन में कॉल करें. उदाहरण के लिए, सीओआरएस की सुविधा चालू करने के लिए, यह ब्लॉक जोड़ें:
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
अनुरोध से वैल्यू पढ़ना
यहां दी गई टेबल में कुछ सामान्य स्थितियों के बारे में बताया गया है:कॉन्टेंट टाइप | अनुरोध का मुख्य भाग | व्यवहार |
---|---|---|
application/json |
'{"name":"John"}' |
request.body.name का मान 'रमेश' है |
application/octet-stream |
'my text' | request.body का बराबर '6d792074657874' है (अनुरोध के रॉ बाइट; Node.js बफ़र दस्तावेज़ देखें) |
text/plain |
'मेरा टेक्स्ट' | request.body 'मेरा टेक्स्ट' के बराबर है |
application/x-www-form-urlencoded |
'name=John' | request.body.name , 'रमेश' के बराबर है |
यह पार्सिंग, बॉडी पार्स करने वाले इन टूल से की जाती है:
- JSON बॉडी पार्सर
- रॉ बॉडी पार्सर
- टेक्स्ट बॉडी पार्स करने वाला टूल
- यूआरएल-एन्कोड किया गया फ़ॉर्म बॉडी पार्स करने वाला टूल
मान लें कि आपके फ़ंक्शन को इस अनुरोध के साथ कॉल किया जाता है:
curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'
तो भेजा गया डेटा यहां मेटालाइज़ किया जाएगा:
प्रॉपर्टी/तरीका | मान |
---|---|
req.method |
"POST" |
req.get('x-myheader') |
"123" |
req.query.foo |
"बाज़" |
req.body.text |
"कुछ" |
req.rawBody |
अनुरोध के रॉ (बिना पार्स किए गए) बाइट |
date()
फ़ंक्शन के उदाहरण में, फ़ंक्शन यूआरएल पैरामीटर और मुख्य हिस्से, दोनों में format
वैल्यू की जांच करता है, ताकि इस्तेमाल करने के लिए तारीख/समय का फ़ॉर्मैट सेट किया जा सके:
let format = req.query.format; format = req.body.format;
एचटीटीपी फ़ंक्शन को खत्म करना
एचटीटीपी फ़ंक्शन को हमेशा send()
, redirect()
या end()
से खत्म करें. ऐसा न करने पर, हो सकता है कि आपका फ़ंक्शन चलता रहे और सिस्टम उसे जबरन बंद कर दे. सिंक, एक साथ काम न करने वाले प्रोसेस, और प्रॉमिस भी देखें.
Node.js moment
मॉड्यूल का इस्तेमाल करके, सर्वर के समय को फ़ॉर्मैट करने और उसे वापस पाने के बाद, date()
फ़ंक्शन एचटीटीपी रिस्पॉन्स में नतीजा भेजकर काम पूरा करता है:
const formattedDate = moment().format(`${format}`); functions.logger.log('Sending Formatted date:', formattedDate); res.status(200).send(formattedDate);
एचटीटीपी फ़ंक्शन को Firebase Hosting से कनेक्ट करना
Firebase Hosting से एचटीटीपी फ़ंक्शन कनेक्ट किया जा सकता है. आपकी Firebase Hosting साइट पर किए गए अनुरोध, कुछ खास एचटीटीपी फ़ंक्शन के लिए प्रॉक्सी किए जा सकते हैं. इससे, एचटीटीपी फ़ंक्शन के साथ अपने कस्टम डोमेन का इस्तेमाल भी किया जा सकता है. Cloud Functions को Firebase Hosting से कनेक्ट करने के बारे में ज़्यादा जानें.