functions.https का इस्तेमाल करके, एचटीटीपी अनुरोध के ज़रिए किसी फ़ंक्शन को ट्रिगर किया जा सकता है. इससे आपको एचटीटीपी के इन तरीकों का इस्तेमाल करके, सिंक्रोनस फ़ंक्शन को शुरू करने की सुविधा मिलती है: GET, POST, PUT, DELETE, और OPTIONS.
इस पेज पर दिए गए उदाहरण, सैंपल फ़ंक्शन पर आधारित हैं. यह फ़ंक्शन तब ट्रिगर होता है, जब फ़ंक्शन के एंडपॉइंट पर एचटीटीपी GET अनुरोध भेजा जाता है. सैंपल फ़ंक्शन, सर्वर का मौजूदा समय हासिल करता है. इसके बाद, यूआरएल क्वेरी पैरामीटर में बताए गए फ़ॉर्मैट के हिसाब से समय को फ़ॉर्मैट करता है और नतीजे को एचटीटीपी रिस्पॉन्स में भेजता है.
एचटीटीपी अनुरोध की मदद से किसी फ़ंक्शन को ट्रिगर करना
functions.https का इस्तेमाल करके, एचटीटीपी इवेंट को मैनेज करने वाला फ़ंक्शन बनाएं. एचटीटीपी फ़ंक्शन के लिए इवेंट हैंडलर, onRequest() इवेंट को सुनता है. यह इवेंट, Express वेब फ़्रेमवर्क से मैनेज किए जाने वाले राऊटर और ऐप्लिकेशन के साथ काम करता है.
Express के अनुरोध और रिस्पॉन्स ऑब्जेक्ट का इस्तेमाल करना
onRequest() के लिए आर्ग्युमेंट के तौर पर इस्तेमाल किया जाने वाला Request ऑब्जेक्ट, आपको क्लाइंट से भेजे गए एचटीटीपी अनुरोध की प्रॉपर्टी को ऐक्सेस करने की सुविधा देता है. वहीं, Response ऑब्जेक्ट, आपको क्लाइंट को जवाब भेजने की सुविधा देता है.
exports.date = functions.https.onRequest((req, res) => { // ... });
मौजूदा Express ऐप्लिकेशन का इस्तेमाल करना
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);
एचटीटीपी फ़ंक्शन को शुरू करना
एचटीटीपी फ़ंक्शन को डिप्लॉय करने के बाद, उसे उसके यूनीक यूआरएल से शुरू किया जा सकता है. यूआरएल में ये चीज़ें इस क्रम में शामिल होती हैं:
- वह इलाका (या इलाके) जहां आपने अपना फ़ंक्शन डिप्लॉय किया है. नेटवर्क लेटेंसी को कम करने के लिए, कुछ प्रोडक्शन फ़ंक्शन के लिए जगह को साफ़ तौर पर सेट करना पड़ सकता है.
- आपका Firebase प्रोजेक्ट आईडी
cloudfunctions.net- आपके फ़ंक्शन का नाम
उदाहरण के लिए, date() को शुरू करने का यूआरएल कुछ ऐसा दिखता है:
https://us-central1-<project-id>.cloudfunctions.net/date
अगर फ़ंक्शन डिप्लॉय करते समय आपको अनुमति से जुड़ी गड़बड़ियां मिलती हैं, तो पक्का करें कि डिप्लॉयमेंट कमांड चलाने वाले उपयोगकर्ता को सही आईएएम भूमिकाएं असाइन की गई हों.
Express ऐप्लिकेशन रूटिंग की मदद से, फ़ंक्शन का नाम आपके तय किए गए ऐप्लिकेशन में यूआरएल पाथ के प्रीफ़िक्स के तौर पर जोड़ा जाता है. उदाहरण के लिए, ऊपर दिए गए 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, 'John' के बराबर है |
application/octet-stream |
'my text' | request.body की वैल्यू '6d792074657874' के बराबर है (अनुरोध के रॉ बाइट; Node.js बफ़र दस्तावेज़ देखें) |
text/plain |
'my text' | request.body, 'मेरा टेक्स्ट' के बराबर है |
application/x-www-form-urlencoded |
'name=John' | request.body.name, 'John' के बराबर है |
यह पार्सिंग, इन बॉडी पार्सर की मदद से की जाती है:
मान लें कि आपके फ़ंक्शन को इस अनुरोध के साथ कॉल किया गया है:
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 साइट पर किए गए अनुरोधों को, एचटीटीपी फ़ंक्शन के लिए प्रॉक्सी किया जा सकता है. इससे आपको एचटीटीपी फ़ंक्शन के साथ अपने कस्टम डोमेन का इस्तेमाल करने की सुविधा भी मिलती है. Cloud Functions को Firebase Hosting से कनेक्ट करने के बारे में ज़्यादा जानें.