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

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

অতিরিক্ত HTTP বিকল্পগুলি

বিকল্প বর্ণনা
region HTTP ফাংশনগুলো একাধিক অঞ্চলের একটি অ্যারের পাশাপাশি একটি একক অঞ্চলও নির্দিষ্ট করতে পারে। যখন একাধিক অঞ্চল নির্দিষ্ট করা হয়, তখন প্রতিটি অঞ্চলের জন্য একটি পৃথক ফাংশন ইনস্ট্যান্স স্থাপন করা হবে।
timeoutSeconds (পাইথনের জন্য timeout_sec ) HTTP ফাংশনগুলোতে সর্বোচ্চ এক ঘণ্টার একটি টাইমআউট নির্দিষ্ট করা যেতে পারে।
cors HTTP ফাংশনগুলো CORS পলিসি নির্দিষ্ট করতে পারে। সমস্ত অরিজিনকে অনুমতি দিতে আপনি এটিকে ' true সেট করতে পারেন, অথবা অনুমোদিত অরিজিনগুলো নির্দিষ্ট করতে একটি string , regex বা array ব্যবহার করতে পারেন। স্পষ্টভাবে সেট করা না হলে, ডিফল্টরূপে এটি 'false' থাকে বা কোনো CORS পলিসি থাকে না।

CORS (ক্রস-অরিজিন রিসোর্স শেয়ারিং) কনফিগার করা

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

request has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

এছাড়াও আপনি আপনার ফাংশনের জন্য cors অপশনটি false সেট করে CORS স্পষ্টভাবে নিষ্ক্রিয় করতে পারেন।

সবগুলো নয়, বরং কিছু ক্রস-অরিজিন অনুরোধের অনুমতি দেওয়ার জন্য, আপনি নির্দিষ্ট কিছু ডোমেইন বা রেগুলার এক্সপ্রেশনের একটি তালিকা পাস করতে পারেন যেগুলোকে অনুমতি দেওয়া উচিত। উদাহরণস্বরূপ, যদি firebase.com এবং flutter.com ডোমেইন দুটি আপনার মালিকানাধীন হয়, এবং firebase.com অনেকগুলো সাবডোমেইন থাকতে পারে, তাহলে আপনি Node.js-এর জন্য cors অপশনটি [/firebase\.com$/, 'https://flutter.com'] অথবা Python-এর জন্য [r'firebase\.com$', r'https://flutter\.com'] হিসেবে সেট করতে চাইতে পারেন:

নোড.জেএস

const { onRequest } = require("firebase-functions/v2/https");

exports.sayHello = onRequest(
  { cors: [/firebase\.com$/, "https://flutter.com"] },
  (req, res) => {
    res.status(200).send("Hello world!");
  }
);

পাইথন

from firebase_functions import https_fn, options

@https_fn.on_request(
    cors=options.CorsOptions(
        cors_origins=[r"firebase\.com$", r"https://flutter\.com"],
        cors_methods=["get", "post"],
    )
)
def say_hello(req: https_fn.Request) -> https_fn.Response:
    return https_fn.Response("Hello world!")

যদি আপনার ফাংশনটি উন্মুক্তভাবে উপলব্ধ হওয়ার কথা থাকে, যেমন যদি এটি কোনো পাবলিক এপিআই বা ওয়েবসাইট পরিষেবা দেয়, তাহলে cors পলিসিটি true তে সেট করুন।

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

HTTP ইভেন্টগুলি পরিচালনা করার জন্য একটি ফাংশন তৈরি করতে আপনার প্ল্যাটফর্মের রিকোয়েস্ট হ্যান্ডলার ( onRequest() বা on_request ) ব্যবহার করুন। এই বিভাগের উদাহরণগুলি একটি "টাইম সার্ভার" স্যাম্পলের উপর ভিত্তি করে তৈরি, যা ফাংশন এন্ডপয়েন্টে একটি HTTP GET রিকোয়েস্ট পাঠালে ট্রিগার হয়। স্যাম্পল ফাংশনটি বর্তমান সার্ভার সময় সংগ্রহ করে, একটি URL কোয়েরি প্যারামিটারে নির্দিষ্ট করা অনুযায়ী সময়টিকে ফরম্যাট করে এবং ফলাফলটি HTTP রেসপন্সে পাঠিয়ে দেয়।

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

রিকোয়েস্ট অবজেক্ট আপনাকে ক্লায়েন্ট কর্তৃক প্রেরিত HTTP রিকোয়েস্টের প্রোপার্টিগুলো অ্যাক্সেস করার সুযোগ দেয়, এবং রেসপন্স অবজেক্ট আপনাকে ক্লায়েন্টের কাছে একটি প্রতিক্রিয়া ফেরত পাঠানোর উপায় প্রদান করে।

নোড.জেএস

exports.date = onRequest(
    {timeoutSeconds: 1200, region: ["us-west1", "us-east1"]},
    (req, res) => {
// ...
});

পাইথন

@https_fn.on_request(cors=options.CorsOptions(cors_origins="*", cors_methods=["get", "post"]))
def date(req: https_fn.Request) -> https_fn.Response:
    """Get the server's local date and time."""

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

রিকোয়েস্ট হ্যান্ডলারের আর্গুমেন্ট হিসেবে অ্যাপটি ব্যবহার করে, আপনি একটি HTTP ফাংশনে সম্পূর্ণ অ্যাপ পাস করতে পারেন:

নোড.জেএস

const { onRequest } = require('firebase-functions/v2/https');

const express = require('express');
const app = express();

// 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 = onRequest(app);

পাইথন

from firebase_admin import initialize_app, db
from firebase_functions import https_fn
import flask

initialize_app()
app = flask.Flask(__name__)

# Build multiple CRUD interfaces:


@app.get("/widgets")
@app.get("/widgets/<id>")
def get_widget(id=None):
    if id is not None:
        return db.reference(f"/widgets/{id}").get()
    else:
        return db.reference("/widgets").get()


@app.post("/widgets")
def add_widget():
    new_widget = flask.request.get_data(as_text=True)
    db.reference("/widgets").push(new_widget)
    return flask.Response(status=201, response="Added widget")


# Expose Flask app as a single Cloud Function:


@https_fn.on_request()
def httpsflaskexample(req: https_fn.Request) -> https_fn.Response:
    with app.request_context(req.environ):
        return app.full_dispatch_request()

একটি HTTP ফাংশন চালু করুন

একটি HTTP ফাংশন ডিপ্লয় করার পর, আপনি সেটির নিজস্ব স্বতন্ত্র URL-এর মাধ্যমে সেটিকে কল করতে পারেন। ডিপ্লয়মেন্টের পর CLI থেকে প্রাপ্ত হুবহু URL-টি ব্যবহার করুন।

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

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

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

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

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

নোড.জেএস

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

পাইথন

format = req.args["format"] if "format" in req.args else None

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

সার্ভারের সময় সংগ্রহ ও ফরম্যাট করার পর, date() ফাংশনটি HTTP রেসপন্সে ফলাফলটি পাঠিয়ে তার কাজ শেষ করে:

নোড.জেএস

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

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

পাইথন

formatted_date = datetime.now().strftime(format)
print(f"Sending Formatted date: {formatted_date}")
return https_fn.Response(formatted_date)

ফায়ারবেস হোস্টিং এর সাথে একীভূতকরণ

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