Check out what’s new from Firebase at Google I/O 2022. Learn more

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 फ़ंक्शन को परिनियोजित करने के बाद, आप इसे अपने स्वयं के अनूठे URL के माध्यम से लागू कर सकते हैं। यूआरएल में निम्नलिखित शामिल हैं, क्रम में:

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

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

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

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

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

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

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

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

यदि आपको कुकी समर्थन या CORS जैसी चीज़ों के लिए मिडलवेयर निर्भरता को इंजेक्ट करने की आवश्यकता है, तो इन्हें फ़ंक्शन के भीतर कॉल करें। उदाहरण के लिए, 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 फ़ंक्शंस को Firebase होस्टिंग से कनेक्ट करना

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