Global Exception Handler কনফিগার করা

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এর Error Handling এবং Custom Exceptions
203

FastAPI তে Global Exception Handler ব্যবহার করে আপনি অ্যাপ্লিকেশনের সকল ধরনের ত্রুটি বা এক্সসেপশন এককভাবে হ্যান্ডেল করতে পারেন। এর মাধ্যমে আপনি কাস্টম ত্রুটি বার্তা, স্ট্যাটাস কোড এবং লগিং সুবিধা যোগ করতে পারেন, যা অ্যাপ্লিকেশনকে আরও মজবুত এবং ব্যবস্থাপনাযোগ্য করে তোলে।

এখানে আমরা দেখব কিভাবে FastAPI তে Global Exception Handler কনফিগার করা যায় এবং কাস্টম ত্রুটি বার্তা ও স্ট্যাটাস কোড পরিচালনা করা যায়।


Step 1: FastAPI তে Default Exception Handling

FastAPI স্বয়ংক্রিয়ভাবে কিছু সাধারণ এক্সসেপশন যেমন 404 Not Found এবং 422 Unprocessable Entity এর জন্য ডিফল্ট এক্সসেপশন হ্যান্ডলিং প্রদান করে।

যতটা সহজ FastAPI এ Exception হ্যান্ডলিং করা যায়, ততটাই গুরুত্বপূর্ণ যদি আপনি একটি কাস্টম এক্সসেপশন মেসেজ বা অন্যান্য নির্দিষ্ট আচরণ তৈরি করতে চান।


Step 2: Global Exception Handler তৈরি করা

FastAPI তে Global Exception Handler তৈরি করতে আমরা exception_handler ডেকোরেটর ব্যবহার করি। এটি অ্যাপ্লিকেশন স্তরে সমস্ত এক্সসেপশনকে কাস্টমাইজ করে হ্যান্ডল করতে সাহায্য করে।

উদাহরণ: Custom Exception Handler

from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import JSONResponse
from starlette.exceptions import HTTPException as StarletteHTTPException

app = FastAPI()

# Global Exception Handler for HTTPException
@app.exception_handler(StarletteHTTPException)
async def http_exception_handler(request: Request, exc: StarletteHTTPException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"message": f"Custom Error: {exc.detail}"},
    )

@app.get("/items/{item_id}")
async def get_item(item_id: int):
    if item_id > 10:
        raise HTTPException(status_code=404, detail="Item not found")
    return {"item_id": item_id}

এখানে:

  • http_exception_handler: FastAPI তে HTTPException এর জন্য কাস্টম এক্সসেপশন হ্যান্ডলার। এটি HTTPException ত্রুটির জন্য কাস্টম মেসেজ এবং স্ট্যাটাস কোড প্রদান করে।
  • raise HTTPException(status_code=404, detail="Item not found"): এটি একটি সাধারণ HTTPException যা 404 স্ট্যাটাস কোড সহ একটি ত্রুটি তৈরি করবে।

রেসপন্স (যদি item_id > 10):

{
  "message": "Custom Error: Item not found"
}

এখানে, যদি item_id 10 এর বেশি হয়, তবেই কাস্টম ত্রুটি বার্তা ফেরত আসবে।


Step 3: Custom Exception তৈরি এবং হ্যান্ডলিং

ফাস্টএপিআইতে আপনি আপনার কাস্টম এক্সসেপশন তৈরি করতে পারেন এবং সেই এক্সসেপশনকে হ্যান্ডল করতে একটি কাস্টম হ্যান্ডলার সেট করতে পারেন।

উদাহরণ: Custom Exception

from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse

app = FastAPI()

class CustomException(Exception):
    def __init__(self, name: str):
        self.name = name

@app.exception_handler(CustomException)
async def custom_exception_handler(request, exc: CustomException):
    return JSONResponse(
        status_code=418,
        content={"message": f"Custom Error: {exc.name}"},
    )

@app.get("/raise_custom_error/{name}")
async def raise_custom_error(name: str):
    if name == "error":
        raise CustomException(name="Something went wrong with the custom error")
    return {"message": "No error"}

এখানে:

  • CustomException: এটি একটি কাস্টম এক্সসেপশন ক্লাস, যা আপনি যেকোনো ত্রুটি বা সমস্যা হ্যান্ডল করতে তৈরি করতে পারেন।
  • custom_exception_handler: এটি কাস্টম এক্সসেপশন হ্যান্ডলার, যা 418 I'm a teapot স্ট্যাটাস কোড সহ কাস্টম ত্রুটি বার্তা প্রদান করে।

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

GET /raise_custom_error/error
রেসপন্স:

{
  "message": "Custom Error: Something went wrong with the custom error"
}

Step 4: Global Exception Handler for All Exceptions

আপনি যদি সব ধরনের এক্সসেপশনকে হ্যান্ডল করতে চান (যেমন HTTPException, ValueError, TypeError, ইত্যাদি), তবে আপনি একটি সাধারণ কাস্টম এক্সসেপশন হ্যান্ডলার তৈরি করতে পারেন।

উদাহরণ: All Exception Handler

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
import logging

app = FastAPI()

# Global Exception Handler for All Exceptions
@app.exception_handler(Exception)
async def general_exception_handler(request: Request, exc: Exception):
    logging.error(f"An unexpected error occurred: {exc}")
    return JSONResponse(
        status_code=500,
        content={"message": "An unexpected error occurred. Please try again later."},
    )

@app.get("/cause_error/")
async def cause_error():
    raise ValueError("This is a value error")

এখানে:

  • @app.exception_handler(Exception): এই হ্যান্ডলারটি সকল এক্সসেপশনকে হ্যান্ডল করবে।
  • logging.error: ত্রুটির লগ সংরক্ষণ করতে ব্যবহার করা হয়েছে, যাতে আপনি ডিবাগ করতে পারেন।

রিকোয়েস্ট উদাহরণ (যদি ValueError ত্রুটি ঘটেছে):

GET /cause_error/
রেসপন্স:

{
  "message": "An unexpected error occurred. Please try again later."
}

এখানে, ValueError ত্রুটি ঘটে, এবং কাস্টম 500 Internal Server Error বার্তা প্রদান করা হয়।


Step 5: Custom Response for Validation Errors

FastAPI তে validation errors জন্যও কাস্টম এক্সসেপশন হ্যান্ডলার তৈরি করা সম্ভব। FastAPI স্বয়ংক্রিয়ভাবে 422 Unprocessable Entity ত্রুটি ফেলে যদি ইনপুট ডাটা ভুল হয়। আপনি এটি কাস্টমাইজ করতে পারেন।

উদাহরণ: Validation Error Handler

from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse
from pydantic import BaseModel, validator

app = FastAPI()

# Request Body Model
class Item(BaseModel):
    name: str
    price: float

    @validator("name")
    def name_must_contain_space(cls, v):
        if " " not in v:
            raise ValueError("Name must contain a space")
        return v

@app.exception_handler(ValueError)
async def validation_exception_handler(request, exc: ValueError):
    return JSONResponse(
        status_code=422,
        content={"message": f"Validation Error: {exc.args[0]}"}
    )

@app.post("/items/")
async def create_item(item: Item):
    return {"message": "Item created successfully"}

এখানে, আমরা name_must_contain_space ভ্যালিডেটর দিয়ে name ফিল্ডের জন্য একটি কাস্টম ভ্যালিডেশন যোগ করেছি। যদি নামের মধ্যে স্পেস না থাকে, তবে একটি ValueError ত্রুটি হবে।

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

{
  "name": "Laptop",
  "price": 1500.00
}

রেসপন্স (যদি Validation Fail হয়):

{
  "message": "Validation Error: Name must contain a space"
}

FastAPI তে Global Exception Handler ব্যবহার করে আপনি অ্যাপ্লিকেশনের সব ধরনের ত্রুটির জন্য কাস্টম হ্যান্ডলার তৈরি করতে পারেন। কাস্টম ত্রুটি বার্তা, স্ট্যাটাস কোড, এবং লগিং সুবিধা যোগ করে অ্যাপ্লিকেশনটি আরও মজবুত এবং ব্যবস্থাপনাযোগ্য করা যায়। এছাড়া আপনি কাস্টম এক্সসেপশন এবং ভ্যালিডেশন ত্রুটিগুলি হ্যান্ডল করার জন্য শক্তিশালী কাস্টমাইজেশন করতে পারেন।

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

Are you sure to start over?

Loading...