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

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

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

HTTP অনুরোধ সহ একটি ফাংশন ট্রিগার করুন

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

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

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

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

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

onRequest() এর আর্গুমেন্ট হিসেবে App ব্যবহার করে, আপনি একটি সম্পূর্ণ Express অ্যাপকে HTTP ফাংশনে পাস করতে পারেন। বয়লারপ্লেট কোডটি মিডলওয়্যারে স্থানান্তর করা যেতে পারে যেমন দেখানো হয়েছে:

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 ভূমিকাগুলি স্থাপন কমান্ড চালানো ব্যবহারকারীর জন্য নির্ধারিত হয়েছে।

এক্সপ্রেস অ্যাপ রাউটিং এর মাধ্যমে, আপনার সংজ্ঞায়িত অ্যাপের 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 'জন' এর সমান
application/octet-stream 'আমার লেখা' request.body '6d792074657874' এর সমান (অনুরোধের কাঁচা বাইট; Node.js বাফার ডকুমেন্টেশন দেখুন)
text/plain 'আমার লেখা' request.body 'আমার লেখা' এর সমান
application/x-www-form-urlencoded 'নাম = জন' 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 "পোস্ট"
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 ফাংশন বন্ধ করুন

সর্বদা একটি HTTP ফাংশন send() , redirect() , অথবা end() দিয়ে শেষ করুন। অন্যথায়, আপনার ফাংশনটি চলতে থাকতে পারে এবং সিস্টেম দ্বারা জোরপূর্বক বন্ধ করা হতে পারে। আরও দেখুন 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 সাথে সংযুক্ত করা

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