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


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

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

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

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

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

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

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);

एचटीटीपी फ़ंक्शन शुरू करना

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

  • वह इलाका (या इलाके) जहां आपने फ़ंक्शन डिप्लॉय किया है. कुछ प्रोडक्शन फ़ंक्शन को location साफ़ तौर पर सेट करना पड़ सकता है इंतज़ार का समय कम करने के लिए.
  • आपका 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 'नाम=जॉन' 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 "POST"
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 Hosting से कनेक्ट किया जा रहा है

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