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


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

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

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

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

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

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

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

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

onRequest() এর যুক্তি হিসাবে অ্যাপ ব্যবহার করে, আপনি একটি 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-এ নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে, ক্রমানুসারে:

  • যে অঞ্চলে (বা অঞ্চল) আপনি আপনার ফাংশন স্থাপন করেছেন। কিছু প্রোডাকশন ফাংশনকে নেটওয়ার্ক লেটেন্সি কমানোর জন্য স্পষ্টভাবে অবস্থান সেট করতে হতে পারে।
  • আপনার ফায়ারবেস প্রকল্প আইডি
  • 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 ফাংশনগুলি ব্যবহার করেন, আপনি সেই IP ঠিকানাগুলি সন্ধান করতে পারেন যা Google HTTP ফাংশনগুলি পরিবেশন করতে ব্যবহার করে৷

ক্লাউড ফাংশন সহ মিডলওয়্যার মডিউল ব্যবহার করুন

আপনি যদি কুকি সমর্থন বা 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 'নাম = জন' 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') "123"
req.query.foo "বাজ"
req.body.text "কিছু"
req.rawBody অনুরোধের কাঁচা (অপার্স করা) বাইট

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

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

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

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

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

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

Firebase হোস্টিং এর সাথে HTTP ফাংশন সংযুক্ত করা

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