Catch up on highlights from Firebase at Google I/O 2023. 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) => {
  // ...
});

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

TODO: क्या मुझे इसे पायथन से सशर्त बनाना चाहिए, या यह लागू होता है?

ऐप को 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 समर्थन को सक्षम करने के लिए, निम्न ब्लॉक जोड़ें:

// 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 मान के लिए URL पैरामीटर और निकाय दोनों का परीक्षण करता है:

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 फ़ंक्शन के साथ अपने स्वयं के कस्टम डोमेन का उपयोग करने की भी अनुमति देता है। क्लाउड प्रकार्यों को फायरबेस होस्टिंग से जोड़ने के बारे में अधिक जानें।