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


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

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

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

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

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

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

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

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

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

  • वह इलाका या इलाके जहां आपने फ़ंक्शन को डिप्लॉय किया है. कुछ प्रोडक्शन फ़ंक्शन को location साफ़ तौर पर सेट करना पड़ सकता है इंतज़ार का समय कम करने के लिए.
  • आपका Firebase प्रोजेक्ट आईडी
  • cloudfunctions.net
  • आपके फ़ंक्शन का नाम

उदाहरण के लिए, date() से शुरू होने वाला यूआरएल ऐसा दिखेगा:

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

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

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

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 होस्टिंग साइट को कुछ खास एचटीटीपी फ़ंक्शन के लिए प्रॉक्सी किया जा सकता है. यह भी आपको HTTP फ़ंक्शन के साथ अपने खुद के कस्टम डोमेन का इस्तेमाल करने की सुविधा देता है. इसके बारे में ज़्यादा जानें Cloud Functions को Firebase होस्टिंग से कनेक्ट करना.