FastAPI একটি আধুনিক এবং দ্রুত ওয়েব ফ্রেমওয়ার্ক যা উচ্চ পারফরম্যান্স এবং দ্রুত ডেভেলপমেন্টের জন্য ডিজাইন করা হয়েছে। যখন আপনি একটি বড় স্কেল FastAPI অ্যাপ্লিকেশন তৈরি করবেন, তখন আপনাকে কিছু কৌশল এবং সেরা অভ্যাস অনুসরণ করতে হবে যাতে অ্যাপ্লিকেশনটি স্কেলেবল, পোর্টেবল, এবং রক্ষণাবেক্ষণযোগ্য হয়।
এখানে আমরা দেখব কিভাবে একটি Large Scale FastAPI অ্যাপ্লিকেশন তৈরি করা যেতে পারে। এটি সঠিক ফোল্ডার স্ট্রাকচার, ডাটাবেস ডিজাইন, API রাউটিং, অডিট লোগিং, টেস্টিং, এবং আরও অনেক কিছু নিয়ে আলোচনা করবে।
Step 1: প্রজেক্ট স্ট্রাকচার ডিজাইন করা
একটি বড় স্কেল অ্যাপ্লিকেশনের জন্য ফোল্ডার স্ট্রাকচার পরিষ্কার এবং মডুলার হওয়া জরুরি। এতে আপনার অ্যাপ্লিকেশন সহজে স্কেল এবং রক্ষণাবেক্ষণযোগ্য থাকবে।
উদাহরণ: FastAPI অ্যাপ্লিকেশনের স্ট্রাকচার
my_large_fastapi_project/
├── app/
│ ├── main.py # FastAPI অ্যাপ শুরু
│ ├── models/ # ডাটাবেস মডেলস
│ ├── schemas/ # Pydantic schemas (input/output)
│ ├── api/ # API রাউটস
│ │ ├── __init__.py
│ │ ├── users.py # User রাউট
│ │ └── items.py # Item রাউট
│ ├── crud/ # CRUD অপারেশন
│ ├── core/ # অ্যাপের মূল কনফিগারেশন
│ ├── db/ # ডাটাবেস কনফিগারেশন
│ ├── services/ # অতিরিক্ত সার্ভিস লজিক
│ ├── __init__.py
├── requirements.txt # ডিপেনডেন্সি
├── .env # পরিবেশ ভেরিয়েবল
├── alembic/ # মাইগ্রেশন ফাইল (SQLAlchemy)
└── tests/ # টেস্ট কেস
ফোল্ডার স্ট্রাকচারের ব্যাখ্যা:
main.py: FastAPI অ্যাপ শুরু এবং কনফিগারেশন।models/: ডাটাবেস মডেলস, যেখানে ডাটাবেস স্কিমা থাকে।schemas/: Pydantic models যা ইনপুট এবং আউটপুট ভ্যালিডেশন করে।api/: API রাউটস বা এন্ডপয়েন্ট। প্রতিটি মডিউল আলাদা ফাইল হিসেবে থাকে (যেমন,users.py,items.py)।crud/: ডাটাবেস অপারেশন যেমন Create, Read, Update, Delete।core/: অ্যাপ কনফিগারেশন এবং অন্যান্য মৌলিক কনফিগারেশন (যেমন লগিং, সিকিউরিটি)।db/: ডাটাবেস কনফিগারেশন এবং সংযোগ।services/: অতিরিক্ত লজিক বা সার্ভিস। এখানে আপনি বাহ্যিক API কল, ইমেইল পাঠানো, এবং অন্যান্য লজিক রাখতে পারেন।
Step 2: ডাটাবেস সংযোগ এবং মডেল ডিজাইন
SQLAlchemy বা Tortoise ORM দিয়ে ডাটাবেস মডেল ডিজাইন করা হয়। এখানে আমরা SQLAlchemy ব্যবহার করছি।
উদাহরণ: SQLAlchemy মডেল
# app/models/item.py
from sqlalchemy import Column, Integer, String, Float
from app.db import Base
class Item(Base):
__tablename__ = 'items'
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
description = Column(String)
price = Column(Float)
ডাটাবেস কনফিগারেশন:
# app/db.py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
এখানে, SessionLocal হল ডাটাবেস সেশন তৈরির জন্য ব্যবহৃত মেথড, এবং Base হল সমস্ত মডেলের বেস ক্লাস।
Step 3: CRUD অপারেশন ডিজাইন
CRUD (Create, Read, Update, Delete) অপারেশন ডিজাইন করার জন্য, আমরা CRUD ফোল্ডারে আলাদা ফাইল তৈরি করব যা ডাটাবেস অপারেশনগুলির সাথে সম্পর্কিত হবে।
উদাহরণ: CRUD অপারেশন
# app/crud/item.py
from sqlalchemy.orm import Session
from app.models.item import Item
from app.schemas.item import ItemCreate
def create_item(db: Session, item: ItemCreate):
db_item = Item(name=item.name, description=item.description, price=item.price)
db.add(db_item)
db.commit()
db.refresh(db_item)
return db_item
Pydantic স্কিমা:
# app/schemas/item.py
from pydantic import BaseModel
class ItemBase(BaseModel):
name: str
description: str | None = None
price: float
class ItemCreate(ItemBase):
pass
class Item(ItemBase):
id: int
class Config:
orm_mode = True
ItemCreate স্কিমা ব্যবহারকারী থেকে ডাটা গ্রহণের জন্য এবং Item স্কিমা ডাটাবেস থেকে ফেরত আসা আইটেমের জন্য।
Step 4: API রাউটস এবং Endpoints
আমরা /users, /items ইত্যাদি বিভিন্ন এন্ডপয়েন্ট তৈরি করব এবং রাউট করতে APIRouter ব্যবহার করব।
উদাহরণ: API রাউট
# app/api/items.py
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app import crud, schemas, models
from app.db import SessionLocal
router = APIRouter()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@router.post("/items/", response_model=schemas.Item)
def create_item(item: schemas.ItemCreate, db: Session = Depends(get_db)):
return crud.create_item(db=db, item=item)
এখানে, create_item ফাংশন ব্যবহারকারী থেকে ইনপুট নিয়ে ডাটাবেসে আইটেম তৈরি করে। Depends(get_db) ডাটাবেস সেশন গ্রহণ করে।
Step 5: ডিপেনডেন্সি ইনজেকশন এবং রাউটস
একটি বড় অ্যাপ্লিকেশন পরিচালনা করতে Dependency Injection ব্যবহার করা খুবই কার্যকর। এটি কোডের পুনরায় ব্যবহারযোগ্যতা এবং পরীক্ষণযোগ্যতা (testability) বাড়ায়।
FastAPI ডিপেনডেন্সি ইনজেকশনের মাধ্যমে, যেমন ডাটাবেস সেশন এবং সার্ভিস লজিক ইনজেক্ট করা যায়।
Step 6: টেস্টিং
FastAPI স্বয়ংক্রিয়ভাবে OpenAPI স্পেসিফিকেশন তৈরি করে, যা Swagger UI এবং ReDoc দ্বারা টেস্ট করা যেতে পারে।
টেস্টিং এর উদাহরণ:
# tests/test_item.py
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def test_create_item():
response = client.post("/items/", json={"name": "Item 1", "price": 20.0})
assert response.status_code == 200
assert response.json() == {"name": "Item 1", "price": 20.0, "id": 1}
Step 7: ডিপ্লয়মেন্ট
- Docker Integration: Dockerfile ব্যবহার করে অ্যাপ কনটেইনারাইজড করে ডিপ্লয় করা যায়।
- Heroku/AWS/GCP: Heroku, AWS, অথবা Google Cloud Platform-এ FastAPI অ্যাপ ডিপ্লয় করা যেতে পারে।
একটি বড় স্কেল FastAPI অ্যাপ্লিকেশন তৈরি করতে হলে মডুলার অ্যাপ স্ট্রাকচার, ডাটাবেস ডিজাইন, CRUD অপারেশন, ডিপেনডেন্সি ইনজেকশন এবং টেস্টিং ব্যবহার করা জরুরি। FastAPI এর সাহায্যে খুব দ্রুত স্কেলেবল এবং পোর্টেবল অ্যাপ্লিকেশন তৈরি করা সম্ভব, যা প্রোডাকশনে উচ্চ পারফরম্যান্স সরবরাহ করে।
Read more