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

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

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

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

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

এক্সপ্রেস অনুরোধ এবং প্রতিক্রিয়া অবজেক্ট ব্যবহার করে

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

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

বিদ্যমান এক্সপ্রেস অ্যাপ ব্যবহার করে

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-টিতে ক্রমানুসারে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত থাকে:

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

উদাহরণস্বরূপ, date() ফাংশনটি কল করার জন্য URL-টি দেখতে এইরকম হয়:

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

ফাংশন ডিপ্লয় করার সময় যদি পারমিশন সংক্রান্ত ত্রুটি দেখা দেয়, তাহলে নিশ্চিত করুন যে ডিপ্লয়মেন্ট কমান্ডগুলো চালনাকারী ব্যবহারকারীকে যথাযথ IAM রোলগুলো বরাদ্দ করা আছে।

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

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

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

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 'my text'-এর সমান
application/x-www-form-urlencoded 'নাম=জন' 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 "পোস্ট"
req.get('x-myheader') "১২৩"
req.query.foo "বাজ"
req.body.text "কিছু একটা"
req.rawBody অনুরোধের কাঁচা (অপরিশোধিত) বাইটগুলি

date() ফাংশনের উদাহরণে, কোন তারিখ/সময়ের ফরম্যাট ব্যবহার করা হবে তা নির্ধারণ করার জন্য ফাংশনটি URL প্যারামিটার এবং বডি উভয়ের format ভ্যালু পরীক্ষা করে:

let format = req.query.format;
format = req.body.format;

HTTP ফাংশনগুলি বন্ধ করুন

সর্বদা send() , redirect() , বা end() ব্যবহার করে একটি HTTP ফাংশন শেষ করুন। অন্যথায়, আপনার ফাংশনটি চলতে থাকতে পারে এবং সিস্টেম দ্বারা জোরপূর্বক বন্ধ করে দেওয়া হতে পারে। আরও দেখুন Sync, Async এবং Promises

Node.js-এর moment মডিউল ব্যবহার করে সার্ভারের সময় সংগ্রহ ও ফরম্যাট করার পর, date() ফাংশনটি HTTP রেসপন্সে ফলাফলটি পাঠিয়ে তার কাজ শেষ করে:

const formattedDate = moment().format(`${format}`);
functions.logger.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

HTTP ফাংশনগুলিকে Firebase Hosting এর সাথে সংযুক্ত করা

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