HTTP अनुरोधों के माध्यम से कॉल फ़ंक्शन


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

इस पृष्ठ के उदाहरण एक नमूना फ़ंक्शन पर आधारित हैं जो तब ट्रिगर होता है जब आप फ़ंक्शन एंडपॉइंट पर HTTP GET अनुरोध भेजते हैं। नमूना फ़ंक्शन वर्तमान सर्वर समय को पुनः प्राप्त करता है, URL क्वेरी पैरामीटर में निर्दिष्ट समय को प्रारूपित करता है, और HTTP प्रतिक्रिया में परिणाम भेजता है।

HTTP अनुरोध के साथ फ़ंक्शन को ट्रिगर करें

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

एक्सप्रेस अनुरोध और प्रतिक्रिया ऑब्जेक्ट का उपयोग करना

onRequest() के लिए तर्क के रूप में उपयोग किया जाता है, अनुरोध ऑब्जेक्ट आपको क्लाइंट द्वारा भेजे गए HTTP अनुरोध के गुणों तक पहुंच प्रदान करता है, और रिस्पांस ऑब्जेक्ट आपको क्लाइंट को प्रतिक्रिया वापस भेजने का एक तरीका देता है।

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

मौजूदा एक्सप्रेस ऐप्स का उपयोग करना

App को onRequest() के तर्क के रूप में उपयोग करके, आप एक पूर्ण एक्सप्रेस ऐप को HTTP फ़ंक्शन में पास कर सकते हैं। बॉयलरप्लेट कोड को दिखाए गए अनुसार मिडलवेयर में ले जाया जा सकता है:

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

एक HTTP फ़ंक्शन प्रारंभ करें

HTTP फ़ंक्शन को तैनात करने के बाद, आप इसे अपने अद्वितीय यूआरएल के माध्यम से लागू कर सकते हैं। यूआरएल में क्रम से निम्नलिखित शामिल हैं:

  • वह क्षेत्र (या क्षेत्र) जिस पर आपने अपना फ़ंक्शन तैनात किया है। कुछ उत्पादन कार्यों को नेटवर्क विलंबता को कम करने के लिए स्पष्ट रूप से स्थान निर्धारित करने की आवश्यकता हो सकती है।
  • आपकी फायरबेस प्रोजेक्ट आईडी
  • cloudfunctions.net
  • आपके फ़ंक्शन का नाम

उदाहरण के लिए, date() लागू करने का URL इस तरह दिखता है:

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

यदि आप फ़ंक्शंस को तैनात करते समय अनुमति त्रुटियों का सामना करते हैं, तो सुनिश्चित करें कि परिनियोजन आदेश चलाने वाले उपयोगकर्ता को उचित IAM भूमिकाएँ सौंपी गई हैं।

एक्सप्रेस ऐप रूटिंग के साथ, फ़ंक्शन नाम आपके द्वारा परिभाषित ऐप में यूआरएल पथों के उपसर्ग के रूप में जोड़ा जाता है। उदाहरण के लिए, उपरोक्त एक्सप्रेस ऐप उदाहरण में गेटर को लागू करने का यूआरएल इस तरह दिखता है:

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

यदि आप फ़ायरवॉल या आईपी फ़िल्टर के पीछे HTTP फ़ंक्शंस का आह्वान करते हैं, तो आप उन आईपी पते को देख सकते हैं जिनका उपयोग Google HTTP फ़ंक्शंस प्रदान करने के लिए करता है।

क्लाउड फ़ंक्शंस के साथ मिडलवेयर मॉड्यूल का उपयोग करें

यदि आपको कुकी समर्थन या सीओआरएस जैसी चीजों के लिए मिडलवेयर निर्भरताएं इंजेक्ट करने की आवश्यकता है, तो इन्हें फ़ंक्शन के भीतर कॉल करें। उदाहरण के लिए, CORS समर्थन सक्षम करने के लिए, निम्नलिखित ब्लॉक जोड़ें:

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

HTTP फ़ंक्शंस समाप्त करें

HTTP फ़ंक्शन को हमेशा send() , redirect() , या end() के साथ समाप्त करें। अन्यथा, आपका फ़ंक्शन चलता रह सकता है और सिस्टम द्वारा जबरन समाप्त किया जा सकता है। सिंक, एसिंक और प्रॉमिस भी देखें।

Node.js moment मॉड्यूल का उपयोग करके सर्वर समय को पुनर्प्राप्त करने और फ़ॉर्मेट करने के बाद, date() फ़ंक्शन HTTP प्रतिक्रिया में परिणाम भेजकर समाप्त होता है:

const formattedDate = moment().format(`${format}`);
functions.logger.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

HTTP फ़ंक्शंस को फ़ायरबेस होस्टिंग से कनेक्ट करना

आप HTTP फ़ंक्शन को फ़ायरबेस होस्टिंग से कनेक्ट कर सकते हैं। आपकी फायरबेस होस्टिंग साइट पर अनुरोधों को विशिष्ट HTTP फ़ंक्शंस के लिए प्रॉक्सी किया जा सकता है। यह आपको HTTP फ़ंक्शन के साथ अपने स्वयं के कस्टम डोमेन का उपयोग करने की भी अनुमति देता है। क्लाउड फ़ंक्शंस को फ़ायरबेस होस्टिंग से कनेक्ट करने के बारे में और जानें।