functions.https
का इस्तेमाल करके, एचटीटीपी अनुरोध के ज़रिए किसी फ़ंक्शन को ट्रिगर किया जा सकता है. इससे आपको इन एचटीटीपी तरीकों का इस्तेमाल करके, सिंक्रोनस फ़ंक्शन को चालू करने की अनुमति मिलती है: GET
, POST
, PUT
, DELETE
, और OPTIONS
.
इस पेज पर दिए गए उदाहरण, सैंपल फ़ंक्शन पर आधारित हैं. यह फ़ंक्शन तब ट्रिगर होता है, जब फ़ंक्शन के एंडपॉइंट पर एचटीटीपी GET
अनुरोध भेजा जाता है. इस सैंपल फ़ंक्शन में, सर्वर का मौजूदा समय मिलता है. इसके बाद, यूआरएल क्वेरी पैरामीटर में बताए गए फ़ॉर्मैट के हिसाब से समय को फ़ॉर्मैट किया जाता है. इसके बाद, नतीजे को एचटीटीपी रिस्पॉन्स में भेजा जाता है.
एचटीटीपी अनुरोध के साथ किसी फ़ंक्शन को ट्रिगर करना
एचटीटीपी इवेंट को मैनेज करने वाला फ़ंक्शन बनाने के लिए, functions.https
का इस्तेमाल करें. एचटीटीपी फ़ंक्शन के लिए इवेंट हैंडलर, onRequest()
इवेंट को सुनता है. यह 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
अगर फ़ंक्शन डिप्लॉय करते समय अनुमतियों से जुड़ी गड़बड़ियां आती हैं, तो पक्का करें कि डिप्लॉयमेंट कमांड चलाने वाले उपयोगकर्ता को सही IAM भूमिकाएं असाइन की गई हों.
Express ऐप्लिकेशन राउटिंग की मदद से, फ़ंक्शन का नाम, आपके तय किए गए ऐप्लिकेशन में यूआरएल पाथ के प्रीफ़िक्स के तौर पर जोड़ा जाता है. उदाहरण के लिए, ऊपर दिए गए Express ऐप्लिकेशन के उदाहरण में, getter को शुरू करने वाला यूआरएल ऐसा दिखता है:
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
अगर फ़ायरवॉल या आईपी फ़िल्टर के पीछे HTTP फ़ंक्शन चालू किए जाते हैं, तो Google जिन आईपी पतों का इस्तेमाल HTTP फ़ंक्शन को चालू करने के लिए करता है उन्हें देखा जा सकता है.
Cloud Functions के साथ मिडलवेयर मॉड्यूल का इस्तेमाल करना
अगर आपको कुकी या CORS जैसी चीज़ों के लिए मिडलवेयर डिपेंडेंसी इंजेक्ट करनी हैं, तो फ़ंक्शन के अंदर इन्हें कॉल करें. उदाहरण के लिए, सीओआरएस की सुविधा चालू करने के लिए, यह ब्लॉक जोड़ें:
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
अनुरोध से वैल्यू पढ़ना
यहां दी गई टेबल में, कुछ सामान्य स्थितियां बताई गई हैं:कॉन्टेंट टाइप | अनुरोध का मुख्य भाग | व्यवहार |
---|---|---|
application/json |
'{"name":"John"}' |
request.body.name 'जॉन' के बराबर है |
application/octet-stream |
'my text' | request.body equals '6d792074657874' (the raw bytes of the request; see the Node.js Buffer documentation) |
text/plain |
'my text' | request.body 'my text' के बराबर है |
application/x-www-form-urlencoded |
'name=John' | 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 |
"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 से कनेक्ट करने के बारे में ज़्यादा जानें.