FastAPI তে বিল্ট-ইন Middleware ব্যবহার করা হয় যেটি বিভিন্ন সাধারণ কাজ যেমন CORS (Cross-Origin Resource Sharing), সেশন ম্যানেজমেন্ট, এবং অন্যান্য সাধারণ ফিচার হ্যান্ডলিংয়ের জন্য সহায়ক। FastAPI তে কিছু প্রি-বuilt Middleware রয়েছে যেগুলি সহজে কনফিগার করা যায় এবং ব্যবহার করা যায়।
এখানে FastAPI এর বিল্ট-ইন Middleware এর কিছু সাধারণ ব্যবহার দেখানো হবে:
১. CORSMiddleware
CORS (Cross-Origin Resource Sharing) হল একটি নিরাপত্তা বৈশিষ্ট্য যা এক ডোমেইন থেকে অন্য ডোমেইনে রিকোয়েস্টের অনুমতি দেয়। যখন আপনি API তৈরি করেন, এটি বিশেষত গুরুত্বপূর্ণ হয় যাতে আপনার API অন্য ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করতে পারে।
উদাহরণ: CORS Middleware ব্যবহার করা
FastAPI তে CORSMiddleware ব্যবহার করে সহজে CORS কনফিগার করা যায়।
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware
app = FastAPI()
# CORS Middleware যুক্ত করা
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # কোন ডোমেইন থেকে রিকোয়েস্ট আসতে পারে
allow_credentials=True,
allow_methods=["*"], # সকল HTTP মেথডে রিকোয়েস্ট অনুমতি
allow_headers=["*"], # সকল হেডারে রিকোয়েস্ট অনুমতি
)
@app.get("/")
async def read_root():
return {"message": "Hello, FastAPI with CORS!"}
এখানে:
allow_origins=["*"]: সকল উৎস (domains) থেকে রিকোয়েস্ট গ্রহণের অনুমতি দেয়।allow_methods=["*"]: সকল HTTP মেথড (GET, POST, PUT, DELETE ইত্যাদি) অনুমতি দেয়।allow_headers=["*"]: সকল হেডারের মাধ্যমে রিকোয়েস্ট পাঠানোর অনুমতি দেয়।
রিকোয়েস্ট উদাহরণ:
আপনি যদি আপনার API কে অন্য ডোমেইন থেকে কল করতে চান, তাহলে এটি CORS কনফিগারেশন দ্বারা অনুমোদিত হবে।
২. SessionMiddleware
FastAPI তে SessionMiddleware ব্যবহার করা হয় যদি আপনি ক্লায়েন্ট সেশন ম্যানেজমেন্ট করতে চান। এটি HTTP সেশনের মাধ্যমে স্টেটফুল সেশন ম্যানেজমেন্ট প্রদান করে, যেখানে ব্যবহারকারীর ডেটা সেশন কুকির মাধ্যমে সংরক্ষণ করা হয়।
উদাহরণ: SessionMiddleware ব্যবহার করা
from fastapi import FastAPI
from starlette.middleware.sessions import SessionMiddleware
app = FastAPI()
# সেশন কুকি সেট করা
app.add_middleware(SessionMiddleware, secret_key="mysecret")
@app.get("/session")
def get_session_data(request):
# সেশন ডেটা এক্সেস করা
user = request.session.get("user", "Guest")
return {"user": user}
@app.post("/set-session")
def set_session_data(request: Request):
# সেশন ডেটা সেট করা
request.session["user"] = "John Doe"
return {"message": "Session set for John Doe"}
এখানে:
secret_key="mysecret": সেশনের কুকি এনক্রিপ্ট করার জন্য একটি গোপন কৌশল।request.session: সেশন ডেটা সংরক্ষণ এবং অ্যাক্সেস করার জন্য ব্যবহৃত হয়।
রিকোয়েস্ট উদাহরণ:
- GET
/session: সেশন থেকে ব্যবহারকারীর ডেটা ফেরত পাওয়া যাবে। - POST
/set-session: নতুন সেশন ডেটা সেট করা যাবে।
৩. GZipMiddleware
GZipMiddleware হল FastAPI এর বিল্ট-ইন একটি Middleware যা রেসপন্সের কম্প্রেশন (gzip) হ্যান্ডল করতে ব্যবহৃত হয়। এটি রেসপন্সের আকার কমাতে সাহায্য করে, বিশেষত বড় JSON বা টেক্সট ডেটার জন্য এটি অনেক কার্যকরী।
উদাহরণ: GZipMiddleware ব্যবহার করা
from fastapi import FastAPI
from starlette.middleware.gzip import GZipMiddleware
app = FastAPI()
# GZip Middleware যুক্ত করা
app.add_middleware(GZipMiddleware, minimum_size=1000) # minimum_size এর মাধ্যমে রেসপন্স কম্প্রেস করা হয় যদি তার আকার 1000 বাইটের বেশি হয়
@app.get("/")
async def get_data():
return {"message": "This response will be gzip compressed if large enough"}
এখানে:
minimum_size=1000: রেসপন্সের আকার যদি 1000 বাইটের বেশি হয়, তবে এটি স্বয়ংক্রিয়ভাবে gzip দ্বারা কম্প্রেস করা হবে।
রেসপন্স:
যদি রেসপন্স বড় হয়, এটি কম্প্রেস হয়ে ক্লায়েন্টে পাঠানো হবে।
৪. TrustedHostMiddleware
TrustedHostMiddleware হল FastAPI এর বিল্ট-ইন একটি Middleware যা অ্যাপ্লিকেশনকে শুধুমাত্র নির্দিষ্ট হোস্টনেম বা ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করতে সহায়ক হয়। এটি নিরাপত্তা বৃদ্ধির জন্য ব্যবহৃত হয়।
উদাহরণ: TrustedHostMiddleware ব্যবহার করা
from fastapi import FastAPI
from starlette.middleware.trustedhost import TrustedHostMiddleware
app = FastAPI()
# TrustedHostMiddleware যুক্ত করা
app.add_middleware(TrustedHostMiddleware, allowed_hosts=["www.example.com", "*.example.com"])
@app.get("/")
async def read_root():
return {"message": "This request is from a trusted host!"}
এখানে:
allowed_hosts=["www.example.com", "*.example.com"]: শুধুমাত্র এই ডোমেইনগুলো থেকে রিকোয়েস্ট গ্রহণের অনুমতি দেয়।
রিকোয়েস্ট উদাহরণ:
যদি রিকোয়েস্ট example.com থেকে আসে, তবে এটি কাজ করবে, কিন্তু যদি অন্য কোন ডোমেইন থেকে আসে, ত্রুটি হবে।
৫. BaseHTTPMiddleware
FastAPI তে BaseHTTPMiddleware ব্যবহার করে আপনি কাস্টম Middleware তৈরি করতে পারেন যা রিকোয়েস্ট এবং রেসপন্স প্রক্রেসে নিজস্ব লজিক যোগ করতে পারে।
উদাহরণ: Custom Middleware (BaseHTTPMiddleware)
from fastapi import FastAPI
from starlette.middleware.base import BaseHTTPMiddleware
class CustomMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
# রিকোয়েস্ট আসার আগে কাজ
print(f"Request URL: {request.url}")
# রিকোয়েস্ট প্রসেস করা হচ্ছে
response = await call_next(request)
# রেসপন্স আসার পরে কাজ
response.headers['X-Custom-Header'] = 'Custom Header Value'
return response
app = FastAPI()
# কাস্টম Middleware যুক্ত করা
app.add_middleware(CustomMiddleware)
@app.get("/")
async def read_root():
return {"message": "Hello, FastAPI!"}
এখানে:
dispatchমেথডটি রিকোয়েস্ট আসার আগে এবং রেসপন্স তৈরি হওয়ার পরে কার্যকর হয়।call_nextহল একটি ফাংশন যা পরবর্তী রিকোয়েস্ট প্রসেসিং করে এবং রেসপন্স ফিরিয়ে আনে।
FastAPI তে বিল্ট-ইন Middleware ব্যবহারের মাধ্যমে বিভিন্ন সাধারণ কার্যকলাপ যেমন CORS হ্যান্ডলিং, সেশন ম্যানেজমেন্ট, রেসপন্স কম্প্রেশন, নিরাপত্তা নিশ্চিতকরণ, এবং কাস্টম প্রসেসিং করা যেতে পারে। এসব Middleware আপনাকে দ্রুত এবং সুরক্ষিত অ্যাপ্লিকেশন ডেভেলপ করতে সাহায্য করে এবং কোডের পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণ সহজ করে।
Read more