Dependencies তৈরি এবং ব্যবহার

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এর Dependency Injection
194

FastAPI তে Dependencies ব্যবস্থাপনা একটি শক্তিশালী বৈশিষ্ট্য, যা কোডের পুনঃব্যবহারযোগ্যতা, পরিষ্কার কোড এবং কার্যকরী ডেটা সঞ্চালন নিশ্চিত করে। Dependency Injection এর মাধ্যমে FastAPI আপনাকে কোডের বিভিন্ন অংশে নির্ভরশীলতা সহজে পরিচালনা করার সুযোগ দেয়।

Dependency হল এমন একটি ফাংশন বা ক্লাস যা অন্যান্য ফাংশন বা রাউটের মধ্যে পুনঃব্যবহারযোগ্য লগিক বা ডাটা সরবরাহ করে। FastAPI তে এটি খুবই সহজে কাজ করে।


Dependency কী?

Dependency এমন একটি ফাংশন বা ক্লাস যা একটি নির্দিষ্ট রিকোয়েস্ট প্রসেসে ব্যবহৃত হতে পারে, এবং সেটি বিভিন্ন এন্ডপয়েন্টে ইনজেক্ট করা যেতে পারে। সাধারণত Database Connections, Authentication, Validation ইত্যাদি ব্যবহৃত হয়।


Step 1: Dependency তৈরি করা

FastAPI তে Dependency তৈরি করতে সাধারণত একটি ফাংশন ব্যবহার করা হয়, যা একটি নির্দিষ্ট কাজ করে এবং পরে তা অন্য ফাংশন বা রাউটে ইনজেক্ট করা হয়।

উদাহরণ: একটি সাধারণ Dependency ফাংশন

from fastapi import FastAPI, Depends

app = FastAPI()

# Dependency ফাংশন
def get_query_param(q: str = None):
    return q

@app.get("/items/")
def read_item(q: str = Depends(get_query_param)):
    return {"q": q}

এখানে, get_query_param হল একটি Dependency ফাংশন, যা q কোয়েরি প্যারামিটার গ্রহণ করে এবং তা অন্য রাউটে Depends ডেকোরেটরের মাধ্যমে ইনজেক্ট করা হয়।

রিকোয়েস্ট উদাহরণ:

GET /items/?q=fastapi

রেসপন্স:

{
  "q": "fastapi"
}

এখানে, q Dependency ফাংশন থেকে প্রাপ্ত মান ব্যবহার করা হয়েছে।


Step 2: Dependency Injection

FastAPI তে Dependency Injection ব্যবহার করে আপনি dependencies ইনজেক্ট করতে পারেন, যা একটি ফাংশন বা রাউটের মধ্যে স্বয়ংক্রিয়ভাবে সরবরাহ করা হয়।

উদাহরণ: Dependency Injection

from fastapi import FastAPI, Depends

app = FastAPI()

# Dependency ফাংশন
def get_token():
    return "sample_token_123"

@app.get("/items/")
def read_item(token: str = Depends(get_token)):
    return {"token": token}

এখানে, get_token একটি Dependency ফাংশন যা token প্রদান করে এবং এটি read_item রাউটে ইনজেক্ট করা হচ্ছে।

রিকোয়েস্ট উদাহরণ:

GET /items/

রেসপন্স:

{
  "token": "sample_token_123"
}

এখানে, get_token ফাংশন থেকে সরবরাহিত টোকেন ব্যবহার করা হয়েছে।


Step 3: Dependency তে ফাংশন প্যারামিটার

FastAPI তে আপনি Dependency ফাংশনে প্যারামিটার পাস করতে পারেন, যা রাউটের আর্গুমেন্ট থেকে আসতে পারে।

উদাহরণ: প্যারামিটার সহ Dependency

from fastapi import FastAPI, Depends

app = FastAPI()

# Dependency ফাংশন
def get_item_id(item_id: int):
    return item_id

@app.get("/items/{item_id}")
def read_item(item_id: int = Depends(get_item_id)):
    return {"item_id": item_id}

এখানে, get_item_id ফাংশন item_id প্যারামিটার গ্রহণ করে এবং এটি রাউট ফাংশনে ইনজেক্ট করা হচ্ছে।

রিকোয়েস্ট উদাহরণ:

GET /items/123

রেসপন্স:

{
  "item_id": 123
}

Step 4: Dependencies with Classes (Dependency Injection in Classes)

ফাস্টএপিআইতে আপনি ক্লাসের মাধ্যমেও ডিপেনডেন্সি ইনজেক্ট করতে পারেন। এটি বেশ কার্যকরী যখন আপনাকে কিছু শেয়ারযোগ্য অবজেক্ট বা রিসোর্স পরিচালনা করতে হয়।

উদাহরণ: Dependency ইনজেকশন ক্লাসের মাধ্যমে

from fastapi import FastAPI, Depends

app = FastAPI()

# Dependency class
class Database:
    def __init__(self):
        self.connection = "Database Connection Established"
    
    def get_data(self):
        return {"data": "Sample Data from Database"}

# Dependency function
def get_database() -> Database:
    db = Database()
    return db

@app.get("/items/")
def read_item(db: Database = Depends(get_database)):
    return db.get_data()

এখানে, Database একটি ক্লাস হিসেবে ডিপেনডেন্সি ফাংশনে ব্যবহৃত হচ্ছে। get_database ফাংশন ডাটাবেস সংযোগ এবং ডাটা প্রদান করছে।

রিকোয়েস্ট উদাহরণ:

GET /items/

রেসপন্স:

{
  "data": "Sample Data from Database"
}

এখানে, Database ক্লাসের মাধ্যমে ডাটা সংগ্রহ করা হয়েছে।


Step 5: Dependency with Authentication (Authentication Dependencies)

ডিপেনডেন্সি ইনজেকশন সাধারণত Authentication এবং Authorization ব্যবস্থাপনায় ব্যবহৃত হয়। যেমন, টোকেন যাচাই, ইউজার লগইন স্ট্যাটাস চেক ইত্যাদি।

উদাহরণ: Authentication Dependency

from fastapi import FastAPI, Depends, HTTPException, status

app = FastAPI()

# Dependency function to simulate token validation
def get_token(token: str):
    if token != "valid_token":
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid Token",
        )
    return token

@app.get("/secure-data/")
def get_secure_data(token: str = Depends(get_token)):
    return {"message": "This is a secure data!"}

এখানে, get_token একটি Dependency ফাংশন যা টোকেন যাচাই করে এবং get_secure_data রাউটে ইনজেক্ট করা হয়।

রিকোয়েস্ট উদাহরণ:

GET /secure-data/?token=valid_token

রেসপন্স:

{
  "message": "This is a secure data!"
}

Step 6: Dependency Chaining

FastAPI তে আপনি একাধিক ডিপেনডেন্সি চেইনও করতে পারেন। একাধিক ডিপেনডেন্সি একে অপরের উপর নির্ভরশীল হতে পারে।

উদাহরণ: Dependency Chaining

from fastapi import FastAPI, Depends

app = FastAPI()

def dependency_one():
    return "Hello"

def dependency_two(dep_one: str = Depends(dependency_one)):
    return dep_one + ", World!"

@app.get("/")
def read_item(dep: str = Depends(dependency_two)):
    return {"message": dep}

এখানে, dependency_two ফাংশন dependency_one এর উপর নির্ভরশীল এবং read_item রাউটে উভয়ই ইনজেক্ট করা হচ্ছে।

রিকোয়েস্ট উদাহরণ:

GET /

রেসপন্স:

{
  "message": "Hello, World!"
}

FastAPI তে Dependency Injection একটি শক্তিশালী বৈশিষ্ট্য যা কোডের পুনঃব্যবহারযোগ্যতা এবং পরিস্কার কোড তৈরি করতে সহায়ক। Dependency ব্যবহার করে আপনি বিভিন্ন রাউটে কমন ফাংশনালিটি, ডাটা এবং ভ্যালিডেশন সহজে শেয়ার করতে পারেন। এটি বড় এবং স্কেলেবল অ্যাপ্লিকেশন তৈরিতে সহায়ক।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...