HTTP অনুরোধের মাধ্যমে ফাংশন কল করা (১ম জেনারেশন)

functions.https ব্যবহার করে আপনি HTTP অনুরোধের মাধ্যমে কোনও ফাংশন ট্রিগার করতে পারবেন। এটি আপনাকে নিম্নলিখিত কাজ করে এমন HTTP পদ্ধতির মাধ্যমে একটি সিঙ্ক্রোনাস ফাংশন চালু করার অনুমতি দেয়: GET, POST, PUT, DELETE এবং OPTIONS।

এই পৃষ্ঠার উদাহরণগুলি একটি স্যাম্পেল ফাংশন-এর উপর ভিত্তি করে তৈরি করা হয়েছে যা আপনি ফাংশন এন্ডপয়েন্টে একটি HTTP GET অনুরোধ পাঠালে ট্রিগার হয়। স্যাম্পেল ফাংশন বর্তমান সার্ভারের সময় খুঁজে বের করে, URL কোয়েরি প্যারামিটারে নির্দিষ্ট করা ফর্ম্যাটে সময় দেখায় এবং HTTP রেসপন্সে ফলাফল পাঠায়।

HTTP অনুরোধের মাধ্যমে ফাংশন ট্রিগার করা

HTTP ইভেন্ট ম্যানেজ করে এমন ফাংশন তৈরি করতে functions.https ব্যবহার করুন। HTTP ফাংশনের জন্য ইভেন্ট হ্যান্ডলার onRequest() ইভেন্ট শোনে, যা Express ওয়েব ফ্রেমওয়ার্কের মাধ্যমে ম্যানেজ করা রাউটার ও অ্যাপে কাজ করে।

Express অনুরোধ ও রেসপন্স অবজেক্ট ব্যবহার করা

onRequest()-এর জন্য আর্গুমেন্ট হিসেবে ব্যবহার করা হয়, Request অবজেক্ট আপনাকে ক্লায়েন্টের পাঠানো HTTP অনুরোধের প্রপার্টিতে অ্যাক্সেস দেয় এবং Response অবজেক্ট আপনাকে ক্লায়েন্টকে উত্তর পাঠানোর উপায় দেয়।

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

আগে থেকে থাকা Express অ্যাপ ব্যবহার করা

onRequest()-এর জন্য আর্গুমেন্ট হিসেবে App ব্যবহার করে, আপনি HTTP ফাংশনে সম্পূর্ণ 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);

HTTP ফাংশন ইনভোক করা

HTTP ফাংশন ডিপ্লয় করার পরে, আপনি এটির নিজস্ব অনন্য URL-এর মাধ্যমে এটি চালু করতে পারেন। URL-এ নিম্নলিখিত তথ্যগুলি এই ক্রমে থাকে:

  • যে অঞ্চলে (বা অঞ্চলগুলিতে) আপনি আপনার ফাংশন ডিপ্লয় করেছেন। নেটওয়ার্ক লেটেন্সি কমাতে কিছু প্রোডাকশন ফাংশনের ক্ষেত্রে লোকেশন স্পষ্টভাবে সেট করতে হতে পারে।
  • আপনার Firebase প্রোজেক্ট আইডি
  • cloudfunctions.net
  • আপনার ফাংশনের নাম

যেমন, date() চালু করার URL এইরকম দেখতে হয়:

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

ফাংশন ডিপ্লয় করার সময় অনুমতি সংক্রান্ত কোনও সমস্যা হলে, ডিপ্লয়মেন্ট কমান্ড রান করা ব্যবহারকারীকে উপযুক্ত IAM ভূমিকা অ্যাসাইন করা হয়েছে কিনা তা নিশ্চিত করুন।

Express অ্যাপ রাউটিংয়ের মাধ্যমে, আপনার উল্লেখ করা অ্যাপে URL পাথের প্রিফিক্স হিসেবে ফাংশনের নাম যোগ করা হয়। যেমন, উপরে Express অ্যাপের উদাহরণে গেটারকে ইনভোক করার URL এইরকম দেখতে হয়:

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

আপনি যদি ফায়ারওয়াল বা IP ফিল্টারের পিছনে HTTP ফাংশন ইনভোক করেন, তাহলে HTTP ফাংশন পরিবেশন করার জন্য Google যে IP অ্যাড্রেস ব্যবহার করে তা আপনি খুঁজে দেখতে পারবেন।

Cloud Functions-এর সাথে মিডলওয়্যার মডিউল ব্যবহার করুন

কুকি সাপোর্ট বা CORS-এর মতো বিষয়ের জন্য মিডলওয়্যার ডিপেন্ডেন্সি ইনজেক্ট করতে হলে, ফাংশনের মধ্যে এগুলি কল করুন। যেমন, CORS সহায়তা চালু করতে, নিম্নলিখিত ব্লক যোগ করুন:

// Enable CORS using the `cors` express middleware.
cors(req, res, () => {
  // ...
});

অনুরোধ থেকে মান পড়ুন

নিচের সারণীতে কিছু সাধারণ পরিস্থিতি তালিকাভুক্ত করা হয়েছে:

কন্টেন্টের ধরন অনুরোধের প্রধান অংশ আচরণ
application/json '{"name":"John"}' request.body.name 'John'-এর সমান
application/octet-stream 'আমার টেক্সট' request.body '6d792074657874'-এর সমান (অনুরোধের র-বাইট; Node.js বাফার ডকুমেন্টেশন দেখুন)
text/plain 'আমার টেক্সট' 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') "১২৩"
req.query.foo "baz"
req.body.text "কিছু"
req.rawBody অনুরোধের র (পার্স না করা) বাইট

date() ফাংশনের উদাহরণে, ফাংশনটি URL প্যারামিটার এবং বডি, দুটিতেই 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);

Firebase Hosting-এর সাথে HTTP Functions কানেক্ট করা

আপনি Firebase Hosting-এ HTTP ফাংশন কানেক্ট করতে পারবেন। আপনার Firebase Hosting সাইটে করা অনুরোধ নির্দিষ্ট HTTP ফাংশনে প্রক্সি করা যেতে পারে। এছাড়াও, এটি আপনাকে HTTP ফাংশনের সাথে নিজের কাস্টম ডোমেন ব্যবহার করার অনুমতি দেয়। Firebase Hosting-এর সাথে Cloud Functions কানেক্ট করা সম্পর্কে আরও জানুন।