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


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

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

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

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

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

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

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 फ़ंक्शन के साथ मिडलवेयर मॉड्यूल का इस्तेमाल करना

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

// 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 "baz"
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 होस्टिंग से कनेक्ट करने के बारे में ज़्यादा जानें.