functions.https का इस्तेमाल करके, एचटीटीपी अनुरोध के ज़रिए किसी फ़ंक्शन को ट्रिगर किया जा सकता है. इससे, इन एचटीटीपी तरीकों का इस्तेमाल करके, सिंक्रोनस फ़ंक्शन को कॉल किया जा सकता है: GET, POST, PUT, DELETE, और OPTIONS.
इस पेज में दिए गए उदाहरण,
सैंपल फ़ंक्शन
पर आधारित हैं. यह फ़ंक्शन,
फ़ंक्शन के एंडपॉइंट पर एचटीटीपी GET अनुरोध भेजने पर ट्रिगर होता है. सैंपल फ़ंक्शन, मौजूदा सर्वर का समय वापस लाता है. इसके बाद, यूआरएल क्वेरी पैरामीटर में बताए गए फ़ॉर्मैट में समय को फ़ॉर्मैट करता है. इसके बाद, नतीजे को एचटीटीपी रिस्पॉन्स में भेजता है.
एचटीटीपी अनुरोध के ज़रिए किसी फ़ंक्शन को ट्रिगर करना
एचटीटीपी
इवेंट को मैनेज करने वाला फ़ंक्शन बनाने के लिए, functions.https
का इस्तेमाल करें. एचटीटीपी फ़ंक्शन के लिए, इवेंट हैंडलर
onRequest() इवेंट को सुनता है.
यह Express वेब फ़्रेमवर्क से मैनेज किए जाने वाले राऊटर और ऐप्लिकेशन के साथ काम करता है.
Express के अनुरोध और रिस्पॉन्स ऑब्जेक्ट का इस्तेमाल करना
onRequest() के लिए आर्ग्युमेंट के तौर पर इस्तेमाल किया जाने वाला, अनुरोध ऑब्जेक्ट आपको क्लाइंट की ओर से भेजे गए एचटीटीपी अनुरोध की प्रॉपर्टी ऐक्सेस करने की अनुमति देता है. वहीं, रिस्पॉन्स ऑब्जेक्ट आपको क्लाइंट को वापस रिस्पॉन्स भेजने का तरीका देता है.
exports.date = functions.https.onRequest((req, res) => { // ... });
मौजूदा Express ऐप्लिकेशन का इस्तेमाल करना
`onRequest()` के लिए आर्ग्युमेंट के तौर पर, ऐप्लिकेशन का इस्तेमाल करके,
onRequest() एचटीटीपी फ़ंक्शन में पूरा 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 ऐप्लिकेशन के उदाहरण में, गेटर को कॉल करने का यूआरएल ऐसा दिखता है:
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 Buffer के दस्तावेज़ देखें |
text/plain |
'my text' | request.body की वैल्यू 'my text' है |
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 |
"something" |
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कनेक्ट करने के बारे में ज़्यादा जानें.
. इस शुरुआती प्रीव्यू में, स्टैटिक साइट जनरेशन और सर्वर-साइड रेंडरिंग, दोनों की सुविधा उपलब्ध है.