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


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

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

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

Node.js

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

exports.sayHello = onRequest(
  { cors: [/firebase\.com$/, "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 অনুরোধ সহ একটি ফাংশন ট্রিগার করুন

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

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

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

Node.js

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 ফাংশনে একটি সম্পূর্ণ অ্যাপ পাস করতে পারেন:

Node.js

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

Node.js

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

পাইথন

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

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

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

Node.js

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

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 হোস্টিং এর সাথে একীভূত করা

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