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

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

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

বিকল্প বিবরণ
region HTTP ফাংশনগুলি অঞ্চলের একটি অ্যারের পাশাপাশি একটি একক অঞ্চলও নির্দিষ্ট করতে পারে। যখন একাধিক অঞ্চল নির্দিষ্ট করা হয়, তখন প্রতিটি অঞ্চলের জন্য একটি পৃথক ফাংশন উদাহরণ স্থাপন করা হবে।
timeoutSeconds ( পাইথনের জন্য timeout_sec ) HTTP ফাংশনগুলি এক ঘন্টা পর্যন্ত সময়সীমা নির্দিষ্ট করতে পারে।
cors HTTP ফাংশন CORS নীতি নির্দিষ্ট করতে পারে। আপনি এটিকে true তে সেট করতে পারেন যাতে সমস্ত অরিজিন বা একটি string , regex , অথবা array অনুমোদিত অরিজিন নির্দিষ্ট করতে পারে। স্পষ্টভাবে সেট না করা থাকলে ডিফল্টভাবে false/no 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 অনেক সাবডোমেন থাকতে পারে, তাহলে আপনি cors বিকল্পটি Node.js-এর জন্য [/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!")

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

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

আপনার প্ল্যাটফর্মের জন্য অনুরোধ হ্যান্ডলার ( onRequest() অথবা on_request ) ব্যবহার করে HTTP ইভেন্ট পরিচালনা করে এমন একটি ফাংশন তৈরি করুন। এই বিভাগের উদাহরণগুলি একটি "টাইম সার্ভার" নমুনার উপর ভিত্তি করে তৈরি করা হয়েছে যা ফাংশন এন্ডপয়েন্টে 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 প্রতিক্রিয়াতে ফলাফল প্রেরণের মাধ্যমে শেষ হয়:

নোড.জেএস

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

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

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