FastAPI তে Response Model ব্যবহার করে আপনি API-এর আউটপুট (response) ডাটা কাস্টমাইজ করতে পারেন। Response Model সাধারণত Pydantic মডেল ব্যবহার করে তৈরি করা হয়, যা আউটপুট ডাটার টাইপ, ভ্যালিডেশন এবং কাস্টম ফিল্ড কনফিগার করার জন্য সহায়ক।
Response Model এর মাধ্যমে আপনি কেবল রেসপন্সের ডাটা গঠনই নির্ধারণ করেন না, বরং সেই ডাটা কীভাবে রিটার্ন হবে এবং কিভাবে ক্লায়েন্ট তা পাবেন, তা নিয়ন্ত্রণ করেন।
Step 1: Response Model তৈরি করা
FastAPI তে Response Model তৈরি করার জন্য আপনি Pydantic এর BaseModel ব্যবহার করবেন। এই মডেলটি ইনপুট ডাটা (Request Body) এবং আউটপুট ডাটা (Response Body) ভ্যালিডেট করার জন্য ব্যবহৃত হয়।
উদাহরণ: Response Model তৈরি
from pydantic import BaseModel
class ItemResponse(BaseModel):
item_name: str
item_price: float
item_tax: float | None = None
এখানে:
item_name: একটি স্ট্রিং টাইপ ফিল্ড।item_price: একটি ফ্লোট টাইপ ফিল্ড।item_tax: একটি ঐচ্ছিক ফিল্ড, যাfloatটাইপের।
Step 2: Response Model ব্যবহার করা
Response Model ব্যবহার করতে, FastAPI এ response_model প্যারামিটারটি নির্দিষ্ট করে দিন। এটি FastAPI-কে বলে দেয় যে রেসপন্সে কী ধরনের ডাটা প্রত্যাশিত।
উদাহরণ: Response Model ব্যবহার
from fastapi import FastAPI
app = FastAPI()
class ItemResponse(BaseModel):
item_name: str
item_price: float
item_tax: float | None = None
@app.get("/items/{item_id}", response_model=ItemResponse)
def get_item(item_id: int):
return {"item_name": "Laptop", "item_price": 1500.00, "item_tax": 120.00}
এখানে:
/items/{item_id}এন্ডপয়েন্টের রেসপন্স হিসাবেItemResponseমডেলটি ব্যবহার করা হয়েছে।
রিকোয়েস্ট উদাহরণ:
GET /items/1
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00,
"item_tax": 120.00
}
Step 3: Response Model-এ কাস্টমাইজেশন
FastAPI-তে Response Model কাস্টমাইজ করতে পারেন। আপনি মডেলের মধ্যে default values, validation, এবং example values নির্ধারণ করতে পারেন। এছাড়া, response_model_exclude_unset এবং response_model_exclude_none এর মাধ্যমে নির্দিষ্ট ফিল্ডগুলো রেসপন্স থেকে বাদ দেওয়া যেতে পারে।
উদাহরণ: Default Values এবং Validation সহ Response Model
from pydantic import BaseModel, Field
class ItemResponse(BaseModel):
item_name: str = Field(..., example="Laptop")
item_price: float = Field(..., gt=0, example=1500.00)
item_tax: float | None = Field(None, example=120.00)
class Config:
min_anystr_length = 3
anystr_strip_whitespace = True
এখানে:
example: রেসপন্স ডেটার উদাহরণ হিসেবে প্রদান করা হয়েছে যা Swagger UI-তে প্রদর্শিত হবে।gt=0:item_priceফিল্ডের জন্য একটি কাস্টম ভ্যালিডেশন নিশ্চিত করেছে, যাতে মূল্য শূন্যের বেশি হয়।min_anystr_length: স্ট্রিং ফিল্ডগুলির জন্য মিনিমাম দৈর্ঘ্য নির্ধারণ করা হয়েছে।
Step 4: Response Model কাস্টমাইজেশন: Excluding Fields
আপনি চাইলে কিছু ফিল্ডকে রেসপন্স থেকে বাদ দিতে পারেন, যেমন: কোনো নির্দিষ্ট ফিল্ডের মান None বা unset থাকলে।
উদাহরণ: Exclude Unset বা None Fields
@app.get("/items/{item_id}", response_model=ItemResponse, response_model_exclude_unset=True)
def get_item(item_id: int):
return {"item_name": "Laptop", "item_price": 1500.00}
এখানে, response_model_exclude_unset=True ব্যবহার করা হয়েছে, যার ফলে যেকোন unset ফিল্ড (যেগুলির ডিফল্ট মান দেওয়া হয়নি) রেসপন্সে অন্তর্ভুক্ত হবে না।
রেসপন্স (Unset item_tax বাদ দেওয়া):
{
"item_name": "Laptop",
"item_price": 1500.00
}
উদাহরণ: Exclude None Fields
@app.get("/items/{item_id}", response_model=ItemResponse, response_model_exclude_none=True)
def get_item(item_id: int):
return {"item_name": "Laptop", "item_price": 1500.00, "item_tax": None}
এখানে, response_model_exclude_none=True ব্যবহার করা হয়েছে, যার ফলে item_tax (যার মান None) রেসপন্স থেকে বাদ দেওয়া হবে।
রেসপন্স (None item_tax বাদ দেওয়া):
{
"item_name": "Laptop",
"item_price": 1500.00
}
Step 5: Nested Models for Complex Responses
FastAPI-তে আপনি nested models ব্যবহার করে জটিল রেসপন্স কাঠামো তৈরি করতে পারেন, যেমন যেখানে একাধিক মডেল অন্তর্ভুক্ত থাকে।
উদাহরণ: Nested Response Model
from pydantic import BaseModel
from typing import List
class Manufacturer(BaseModel):
name: str
country: str
class ItemResponse(BaseModel):
item_name: str
item_price: float
manufacturer: Manufacturer
@app.get("/items/{item_id}", response_model=ItemResponse)
def get_item(item_id: int):
manufacturer = Manufacturer(name="TechCorp", country="USA")
return {"item_name": "Laptop", "item_price": 1500.00, "manufacturer": manufacturer}
রিকোয়েস্ট উদাহরণ:
GET /items/1
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00,
"manufacturer": {
"name": "TechCorp",
"country": "USA"
}
}
এখানে, Manufacturer মডেলটি ItemResponse মডেলের একটি অংশ হিসেবে nested করা হয়েছে।
Step 6: Customizing Response with Status Code
FastAPI তে আপনি status code কাস্টমাইজ করতে পারেন এবং তার সাথে Response Model ব্যবহার করতে পারেন।
উদাহরণ: Status Code সহ Response Model কাস্টমাইজ করা
from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/items/{item_id}", response_model=ItemResponse, status_code=200)
def get_item(item_id: int):
return {"item_name": "Laptop", "item_price": 1500.00}
এখানে, status_code=200 দ্বারা রেসপন্সের HTTP স্ট্যাটাস কোড কাস্টমাইজ করা হয়েছে।
FastAPI তে Response Model তৈরি এবং কাস্টমাইজ করা খুবই সহজ এবং শক্তিশালী। আপনি Pydantic মডেল ব্যবহার করে ইনপুট এবং আউটপুট ডাটা ভ্যালিডেশন করতে পারেন, মডেল ফিল্ডে কাস্টম ভ্যালিডেশন যুক্ত করতে পারেন, এবং রেসপন্স থেকে ফিল্ড বাদ দেওয়ার জন্য বিভিন্ন কনফিগারেশন ব্যবহার করতে পারেন। এর মাধ্যমে আপনি আপনার API-এর আউটপুট ডাটা পরিষ্কারভাবে কাস্টমাইজ করতে পারবেন এবং ক্লায়েন্টের জন্য আরও ভালো ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে পারবেন।
Read more