একটি প্রফেশনাল ও স্কেলেবল FastAPI প্রজেক্ট তৈরি করার জন্য Clean Code Structure এবং Proper Project Organization অপরিহার্য। একটি ভালো প্রজেক্ট স্ট্রাকচার ডেভেলপমেন্ট প্রক্রিয়াকে আরও কার্যকর, মেইনটেনেবল এবং স্কেলেবল করে তোলে। এটি কোড পুনঃব্যবহারযোগ্য, পরিস্কার এবং সহায়ক রাখে।
এই গাইডে আমরা FastAPI প্রজেক্টের clean code structure এবং proper project organization নিয়ে আলোচনা করবো, যাতে আপনি সহজেই বড় এবং জটিল অ্যাপ্লিকেশন তৈরি করতে পারেন।
Clean Code Structure কি?
Clean Code হল এমন কোড যা সহজে পড়া এবং বুঝতে সহজ হয়, এবং যেখানে সঠিক নামকরণ, যথাযথ ফাংশন ডিজাইন এবং ভাল ডকুমেন্টেশন থাকে। এতে সঠিক প্যাটার্ন এবং স্ট্যান্ডার্ড ব্যবহার করা হয় যা কোড মেইনটেন্যান্স সহজ করে এবং ফিচার অ্যাডিশন বা পরিবর্তন সহজ হয়।
FastAPI প্রজেক্টে Clean Code Structure:
- কোডের পরিষ্কার নামকরণ (Descriptive Naming)
- একটি সুসংহত মডুলার স্ট্রাকচার (Modular Architecture)
- অত্যধিক লজিক কন্ট্রোলের ভেঙে ফেলা (Avoiding Large Monolithic Functions)
- Error Handling এবং Validation
- Proper Use of Dependency Injection
- টেস্টিং এবং ডকুমেন্টেশন
FastAPI প্রজেক্টে Proper Project Organization
একটি সুসংগঠিত প্রজেক্ট স্ট্রাকচার অ্যাপ্লিকেশন ডেভেলপমেন্ট, টেস্টিং, স্কেলিং এবং মেইনটেন্যান্স সহজ করে তোলে। একাধিক ফোল্ডার এবং ফাইল স্ট্রাকচার ব্যবহার করা হয় যাতে আপনার কোডের সংগঠন সুনির্দিষ্ট ও মডুলার থাকে।
একটি সুনির্দিষ্ট FastAPI প্রজেক্ট স্ট্রাকচার
my_fastapi_project/
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── models/
│ │ ├── __init__.py
│ │ └── item.py
│ ├── schemas/
│ │ ├── __init__.py
│ │ └── item.py
│ ├── routes/
│ │ ├── __init__.py
│ │ └── item_routes.py
│ ├── services/
│ │ ├── __init__.py
│ │ └── item_service.py
│ ├── core/
│ │ ├── __init__.py
│ │ ├── config.py
│ │ └── security.py
│ ├── db/
│ │ ├── __init__.py
│ │ ├── database.py
│ │ └── session.py
├── tests/
│ ├── __init__.py
│ ├── test_item.py
├── requirements.txt
├── Dockerfile
└── README.md
ফোল্ডার এবং ফাইল ব্যাখ্যা:
1. app/main.py:
এটি FastAPI অ্যাপ্লিকেশনের মূল এন্ট্রি পয়েন্ট। এখানে FastAPI অ্যাপ অবজেক্ট তৈরি করা হয় এবং রাউট, মিডলওয়্যার, কনফিগারেশন সেটআপ করা হয়।
from fastapi import FastAPI
from .routes import item_routes
app = FastAPI()
# ইনক্লুড করা রাউট
app.include_router(item_routes.router)
2. app/routes/:
এই ফোল্ডারে FastAPI এর সব রাউট এবং এন্ডপয়েন্ট তৈরি করা হয়। এতে রাউটগুলো আলাদা ফাইল বা মডিউলে ভাগ করা হয়, যাতে কোড ক্লিন এবং মডুলার থাকে।
উদাহরণ: item_routes.py
from fastapi import APIRouter
from ..services.item_service import get_item
router = APIRouter()
@router.get("/items/{item_id}")
def read_item(item_id: int):
return get_item(item_id)
3. app/services/:
এই ফোল্ডারটি কোডের কার্যকরী লজিক সংরক্ষণ করে। রাউট এবং কন্ট্রোলারগুলোর কাজ কমাতে এখানে সব সার্ভিস ফাংশন রাখা হয়, যাতে কোড সহজ এবং সুনির্দিষ্ট থাকে।
উদাহরণ: item_service.py
def get_item(item_id: int):
# ডাটাবেস থেকে আইটেম বের করা বা অন্য কার্যাবলী
return {"item_id": item_id, "name": "Item Name"}
4. app/models/:
এখানে ডাটাবেসের জন্য সব মডেল এবং ডাটাবেস টেবিলের কাঠামো রাখা হয়। সাধারণত SQLAlchemy বা Pydantic Models ব্যবহার করা হয়।
উদাহরণ: item.py
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
price: float
5. app/schemas/:
Schemas ফোল্ডারে ইনপুট এবং আউটপুট ভ্যালিডেশন সংক্রান্ত মডেল রাখা হয়। এখানে Pydantic মডেল ব্যবহার করা হয় যা API এর ইনপুট ডাটা যাচাই করে।
উদাহরণ: item.py
from pydantic import BaseModel
class ItemSchema(BaseModel):
name: str
description: str
price: float
6. app/db/:
এই ফোল্ডারে ডাটাবেস সংযোগ এবং সেশন তৈরি করার জন্য কোড থাকে।
উদাহরণ: database.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, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
7. tests/:
এই ফোল্ডারে টেস্টিং সম্পর্কিত ফাইল রাখা হয়। এখানে pytest ব্যবহার করে ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট করা হয়।
উদাহরণ: test_item.py
from fastapi.testclient import TestClient
from app.main import app
client = TestClient(app)
def test_read_item():
response = client.get("/items/1")
assert response.status_code == 200
assert response.json() == {"item_id": 1, "name": "Item Name"}
8. requirements.txt:
এই ফাইলটি আপনার প্রজেক্টের সব প্যাকেজ এবং লাইব্রেরি ডিপেনডেন্সি সংরক্ষণ করে।
9. Dockerfile:
এটি Docker কনটেইনারে অ্যাপ্লিকেশন রান করার জন্য কনফিগারেশন ফাইল।
10. README.md:
এই ফাইলটি প্রজেক্টের সারাংশ এবং সেটআপ নির্দেশনা রাখে।
Clean Code Practices in FastAPI
- Modularization: বড় প্রজেক্টে কোডকে ছোট মডিউলে ভাগ করা, যেমন রাউট, সার্ভিস, মডেল, স্কিমা ইত্যাদি আলাদা ফোল্ডারে রাখা।
- Naming Conventions: ফাইল, ফোল্ডার এবং ভেরিয়েবল নামকরণ পরিষ্কার এবং ডেসক্রিপটিভ হওয়া উচিত।
- Avoiding Repetition: একই কোড পুনরাবৃত্তি থেকে বিরত থাকা। DRY (Don't Repeat Yourself) প্রিন্সিপাল অনুসরণ করা।
- Separation of Concerns: রাউট, লজিক, ডাটাবেস ইন্টারঅ্যাকশন এবং ভ্যালিডেশন আলাদা আলাদা ফাইল বা ক্লাসে রাখা।
- Error Handling: Proper error handling ব্যবহার করা, যেমন custom exceptions তৈরি করা এবং সার্ভিস বা কন্ট্রোলার লেভেলে try-except ব্লক ব্যবহার করা।
Clean Code Structure এবং Proper Project Organization FastAPI প্রজেক্টে গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি কোডকে পড়া এবং মেইনটেন্যান্স করতে সহজ করে তোলে। সঠিক ফোল্ডার স্ট্রাকচার এবং প্রফেশনাল কোড গঠন ডেভেলপারদের জন্য বড় প্রজেক্টে কাজ করা অনেক সহজ এবং স্কেলেবল হয়ে ওঠে।
Read more