एचटीटीपी अनुरोधों के ज़रिए कॉल फ़ंक्शन


functions.https का इस्तेमाल करके, एचटीटीपी अनुरोध के ज़रिए फ़ंक्शन को ट्रिगर किया जा सकता है. इससे आपको काम करने वाले इन एचटीटीपी तरीकों का इस्तेमाल करके, सिंक्रोनस फ़ंक्शन शुरू करने की अनुमति मिलती है: GET, POST, PUT, DELETE, और OPTIONS.

इस पेज पर दिए गए उदाहरण, सैंपल फ़ंक्शन पर आधारित हैं. यह फ़ंक्शन एंडपॉइंट को एचटीटीपी GET अनुरोध भेजने पर ट्रिगर होता है. सैंपल फ़ंक्शन, सर्वर के मौजूदा समय का इस्तेमाल करता है और यूआरएल क्वेरी पैरामीटर में बताए गए समय को फ़ॉर्मैट करता है. साथ ही, एचटीटीपी रिस्पॉन्स में नतीजा भेजता है.

एचटीटीपी अनुरोध के साथ फ़ंक्शन को ट्रिगर करना

एचटीटीपी इवेंट को मैनेज करने वाला फ़ंक्शन बनाने के लिए, functions.https का इस्तेमाल करें. एचटीटीपी फ़ंक्शन का इवेंट हैंडलर, onRequest() इवेंट के लिए काम करता है. यह एक्सप्रेस वेब फ़्रेमवर्क से मैनेज किए जाने वाले राऊटर और ऐप्लिकेशन के साथ काम करता है.

एक्सप्रेस अनुरोध और रिस्पॉन्स ऑब्जेक्ट का इस्तेमाल करना

इसका इस्तेमाल onRequest() के लिए आर्ग्युमेंट के तौर पर किया जाता है. अनुरोध ऑब्जेक्ट, क्लाइंट के भेजे गए एचटीटीपी अनुरोध की प्रॉपर्टी का ऐक्सेस देता है. साथ ही, रिस्पॉन्स ऑब्जेक्ट, क्लाइंट को जवाब वापस भेजने का तरीका उपलब्ध कराता है.

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

मौजूदा एक्सप्रेस ऐप्लिकेशन का इस्तेमाल किया जा रहा है

onRequest() के लिए तर्क के तौर पर ऐप्लिकेशन का इस्तेमाल करके, आप एक पूरा एक्सप्रेस ऐप्लिकेशन को एचटीटीपी फ़ंक्शन में पास कर सकते हैं. बॉयलरप्लेट कोड को मिडलवेयर में ले जाया जा सकता है, जैसा कि यहां दिखाया गया है:

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 भूमिकाएं असाइन की गई हों.

एक्सप्रेस ऐप्लिकेशन रूटिंग की मदद से, फ़ंक्शन का नाम आपके बताए गए ऐप्लिकेशन में, यूआरएल पाथ के प्रीफ़िक्स के तौर पर जोड़ा जाता है. उदाहरण के लिए, ऊपर दिए गए एक्सप्रेस ऐप्लिकेशन के उदाहरण में गैटर को शुरू करने का यूआरएल ऐसा दिखता है:

https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>

अगर आपने फ़ायरवॉल या आईपी फ़िल्टर की मदद से एचटीटीपी फ़ंक्शन शुरू किए हैं, तो आपके पास ऐसे आईपी पते देखने का विकल्प है जिनका इस्तेमाल Google, एचटीटीपी फ़ंक्शन दिखाने के लिए करता है.

Cloud Functions के साथ मिडलवेयर मॉड्यूल का इस्तेमाल करना

अगर आपको कुकी सहायता या सीओआरएस जैसी चीज़ों के लिए मिडलवेयर डिपेंडेंसी को इंजेक्ट करने की ज़रूरत है, तो इन्हें फ़ंक्शन में कॉल करें. उदाहरण के लिए, सीओआरएस सहायता चालू करने के लिए, यह ब्लॉक जोड़ें:

// Enable CORS using the `cors` express middleware.
cors(req, res, () => {
  // ...
});

अनुरोध में सेट की गई वैल्यू देखें

नीचे दी गई टेबल में कुछ आम स्थितियों की सूची दी गई है:

कॉन्टेंट टाइप अनुरोध का मुख्य भाग व्यवहार
application/json '{"name":"John"}' request.body.name का मान 'रमेश' है
application/octet-stream 'मेरा टेक्स्ट' request.body '6d792074657874' के बराबर है (अनुरोध की रॉ बाइट; Node.js बफ़र का दस्तावेज़ देखें)
text/plain 'मेरा टेक्स्ट' request.body 'मेरा टेक्स्ट' के बराबर है
application/x-www-form-urlencoded 'नाम=जॉन' request.body.name का मान 'रमेश' है

यह पार्स करने की प्रोसेस, इन बॉडी पार्सर की मदद से की जाती है:

मान लें कि आपके फ़ंक्शन को नीचे दिए गए अनुरोध के साथ कॉल किया जाता है:

curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'

तो भेजे गए डेटा को

प्रॉपर्टी/तरीका वैल्यू
req.method "पोस्ट करें"
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 होस्टिंग से कनेक्ट करना

एचटीटीपी फ़ंक्शन को Firebase होस्टिंग के साथ कनेक्ट किया जा सकता है. आपकी Firebase होस्टिंग साइट पर किए गए अनुरोध, कुछ खास एचटीटीपी फ़ंक्शन से प्रॉक्सी किए जा सकते हैं. इससे, एचटीटीपी फ़ंक्शन के साथ अपने कस्टम डोमेन का इस्तेमाल भी किया जा सकता है. Cloud Functions को Firebase होस्टिंग से कनेक्ट करने के बारे में ज़्यादा जानें.