FastAPI তে Response Management হল সেই প্রক্রিয়া যেখানে আপনি আপনার API থেকে রেসপন্স কিভাবে ফেরত পাঠাবেন তা নিয়ন্ত্রণ করেন। FastAPI রেসপন্সের জন্য অনেক ধরনের টুলস এবং ফিচার সরবরাহ করে, যেমন JSON রেসপন্স, HTML রেসপন্স, ফাইল রেসপন্স, রেসপন্স কোড, কাস্টম হেডার ইত্যাদি। এখানে আমরা FastAPI তে Response Management-এর বিভিন্ন দিক নিয়ে আলোচনা করব।
FastAPI Response Management
FastAPI-তে রেসপন্স সঠিকভাবে ব্যবস্থাপনা করা হলে API আরও দ্রুত, সঠিক এবং সুবিধাজনক হয়। FastAPI স্বয়ংক্রিয়ভাবে কিছু সাধারণ কাজ যেমন JSON রেসপন্স, রেসপন্স কোড, কাস্টম হেডার ম্যানেজ করে, কিন্তু আপনি চাইলে এগুলো কাস্টমাইজও করতে পারেন।
JSON Response (ডিফল্ট রেসপন্স)
FastAPI ডিফল্টভাবে JSON রেসপন্স ফেরত পাঠায়। আপনি যদি একটি ডাটা বা ডিকশনারি রিটার্ন করেন, তা স্বয়ংক্রিয়ভাবে JSON রেসপন্সে রূপান্তরিত হয়ে যাবে।
উদাহরণ: JSON Response
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
def read_item():
return {"message": "This is a JSON response"}
এখানে, {"message": "This is a JSON response"} ডাটা রিটার্ন করা হচ্ছে এবং এটি JSON রেসপন্স হিসেবে FastAPI সরবরাহ করবে।
রেসপন্স:
{
"message": "This is a JSON response"
}
Response Model (Response Model ব্যবহার)
FastAPI তে আপনি response_model প্যারামিটার ব্যবহার করে কাস্টম রেসপন্স মডেল ডিফাইন করতে পারেন। এতে আপনার API এর আউটপুট আরো ক্লিয়ার এবং ভ্যালিডেটেড থাকে।
উদাহরণ: Response Model
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class ItemResponse(BaseModel):
item_name: str
item_price: float
@app.get("/items/{item_id}", response_model=ItemResponse)
def read_item(item_id: int):
return {"item_name": "Laptop", "item_price": 1500.00}
এখানে, ItemResponse মডেল রেসপন্স মডেল হিসেবে ব্যবহার করা হয়েছে, যা আউটপুট ডাটা ভ্যালিডেশন করবে।
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00
}
Response Status Code (রেসপন্স স্ট্যাটাস কোড)
FastAPI তে আপনি রেসপন্সের HTTP status code নির্ধারণ করতে পারেন। ডিফল্টভাবে FastAPI 200 OK স্ট্যাটাস কোড ব্যবহার করে, তবে আপনি এটি কাস্টমাইজ করতে পারেন।
উদাহরণ: Custom Status Code
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
if item_id == 0:
raise HTTPException(status_code=404, detail="Item not found")
return {"item_id": item_id, "item_name": "Laptop"}
এখানে, যদি item_id ০ হয়, তবে 404 Not Found রেসপন্স কোড সহ একটি ত্রুটি ফেরত পাঠানো হবে।
রেসপন্স:
GET /items/0
{
"detail": "Item not found"
}
HTML Response (HTML রেসপন্স)
FastAPI HTML রেসপন্সও পাঠাতে পারে, যেমন একটি ওয়েব পেজ রিটার্ন করা। HTMLResponse ক্লাস ব্যবহার করে আপনি HTML কনটেন্ট রিটার্ন করতে পারেন।
উদাহরণ: HTML Response
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get("/", response_class=HTMLResponse)
def read_html():
return "<html><body><h1>Welcome to FastAPI!</h1></body></html>"
এখানে, HTML রেসপন্স রিটার্ন করার জন্য HTMLResponse ব্যবহার করা হয়েছে।
রেসপন্স:
<html><body><h1>Welcome to FastAPI!</h1></body></html>
Redirect Response (রিডিরেক্ট রেসপন্স)
FastAPI তে আপনি Redirect রেসপন্সও পাঠাতে পারেন, যেখানে একটি URL থেকে অন্য URL-এ রিডিরেক্ট করা হয়।
উদাহরণ: Redirect Response
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
app = FastAPI()
@app.get("/old-url/")
def redirect_example():
return RedirectResponse(url="/new-url/")
এখানে, /old-url/ থেকে /new-url/ এ রিডিরেক্ট করা হবে।
File Response (ফাইল রেসপন্স)
FastAPI তে আপনি ফাইল রেসপন্সও পাঠাতে পারেন। FileResponse ক্লাস ব্যবহার করে ফাইল রিটার্ন করা হয়।
উদাহরণ: File Response
from fastapi import FastAPI
from fastapi.responses import FileResponse
import os
app = FastAPI()
@app.get("/download/")
def download_file():
file_path = "path_to_your_file.txt"
return FileResponse(file_path)
এখানে, path_to_your_file.txt ফাইলটি রিটার্ন করা হবে।
রেসপন্স:
ফাইল ডাউনলোড শুরু হবে।
Custom Response (কাস্টম রেসপন্স)
আপনি কাস্টম রেসপন্স তৈরি করতে পারেন JSONResponse, HTMLResponse, PlainTextResponse ইত্যাদি ক্লাস ব্যবহার করে।
উদাহরণ: Custom JSON Response
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/custom-json/")
def custom_json_response():
content = {"message": "This is a custom JSON response"}
return JSONResponse(content=content, status_code=201)
এখানে, JSONResponse কাস্টম কনটেন্ট এবং স্ট্যাটাস কোড সহ রিটার্ন করা হয়েছে।
রেসপন্স:
{
"message": "This is a custom JSON response"
}
Custom Headers (কাস্টম হেডার)
FastAPI তে আপনি রেসপন্সে custom headers যোগ করতে পারেন।
উদাহরণ: Custom Headers
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/custom-headers/")
def custom_headers():
content = {"message": "This response has custom headers"}
headers = {"X-Custom-Header": "Custom Header Value"}
return JSONResponse(content=content, headers=headers)
এখানে, কাস্টম হেডার X-Custom-Header যোগ করা হয়েছে।
রেসপন্স:
{
"message": "This response has custom headers"
}
Headers:
X-Custom-Header: Custom Header Value
FastAPI তে Response Management অত্যন্ত শক্তিশালী এবং নমনীয়। আপনি সহজেই JSON, HTML, File, Redirect, Custom Headers ইত্যাদি রেসপন্স প্রদান করতে পারেন। FastAPI তে Response Management ব্যবস্থাপনা API ডেভেলপমেন্টকে আরও দ্রুত এবং সঠিক করে তোলে।
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-এর আউটপুট ডাটা পরিষ্কারভাবে কাস্টমাইজ করতে পারবেন এবং ক্লায়েন্টের জন্য আরও ভালো ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে পারবেন।
FastAPI-তে Response Status Codes কনফিগার করা খুবই সহজ এবং শক্তিশালী। HTTP স্ট্যাটাস কোডগুলো রেসপন্সের অবস্থা এবং সফলতা বা ব্যর্থতা নির্দেশ করে। FastAPI তে আপনি স্ট্যাটাস কোড কাস্টমাইজ করতে পারেন এবং বিভিন্ন রকমের HTTP রেসপন্স পাঠাতে পারেন, যেমন 200 (OK), 201 (Created), 404 (Not Found), 400 (Bad Request), 500 (Internal Server Error) ইত্যাদি।
FastAPI-তে HTTP স্ট্যাটাস কোড কাস্টমাইজেশন স্বয়ংক্রিয়ভাবে বা ম্যানুয়ালি করা যায়।
Step 1: Default Status Code ব্যবহারের উদাহরণ
FastAPI তে, সাধারণত 200 OK স্ট্যাটাস কোড ডিফল্ট হিসেবে ব্যবহৃত হয়, যদি আপনি অন্য স্ট্যাটাস কোড নির্দিষ্ট না করেন।
উদাহরণ: Default Status Code (200 OK)
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI"}
এখানে, GET রিকোয়েস্টের জন্য 200 OK ডিফল্ট স্ট্যাটাস কোড ব্যবহার করা হবে।
রেসপন্স:
{
"message": "Hello, FastAPI"
}
স্ট্যাটাস কোড: 200 OK (ডিফল্ট)
Step 2: Custom Status Code কনফিগার করা
FastAPI তে আপনি কাস্টম স্ট্যাটাস কোড ব্যবহার করতে পারেন, যেমন 201 (Created), 404 (Not Found), 400 (Bad Request) ইত্যাদি। status_code প্যারামিটার ব্যবহার করে আপনি কাস্টম স্ট্যাটাস কোড নির্ধারণ করতে পারেন।
উদাহরণ: Custom Status Code (201 Created)
from fastapi import FastAPI
from fastapi import status
app = FastAPI()
@app.post("/items/", status_code=status.HTTP_201_CREATED)
def create_item(name: str):
return {"message": f"Item '{name}' created successfully!"}
এখানে, POST রিকোয়েস্টের জন্য 201 Created স্ট্যাটাস কোড নির্ধারণ করা হয়েছে।
রিকোয়েস্ট:
POST /items/
Body:
{
"name": "Laptop"
}
রেসপন্স:
{
"message": "Item 'Laptop' created successfully!"
}
স্ট্যাটাস কোড: 201 Created
Step 3: HTTPException এবং কাস্টম স্ট্যাটাস কোড
FastAPI তে HTTPException ব্যবহার করে আপনি কাস্টম স্ট্যাটাস কোড এবং ত্রুটি মেসেজ পাঠাতে পারেন। এইভাবে আপনি 404 Not Found, 400 Bad Request ইত্যাদি কাস্টম স্ট্যাটাস কোড পাঠাতে পারেন।
উদাহরণ: HTTPException ব্যবহার করে কাস্টম স্ট্যাটাস কোড
from fastapi import FastAPI, HTTPException
from fastapi import status
app = FastAPI()
@app.get("/items/{item_id}")
def read_item(item_id: int):
if item_id != 1:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Item with id {item_id} not found"
)
return {"item_id": item_id, "name": "Laptop"}
এখানে, item_id যদি 1 না হয়, তবে 404 Not Found স্ট্যাটাস কোড দিয়ে কাস্টম ত্রুটি মেসেজ পাঠানো হবে।
রিকোয়েস্ট:
GET /items/2
রেসপন্স:
{
"detail": "Item with id 2 not found"
}
স্ট্যাটাস কোড: 404 Not Found
Step 4: Response Status Code সহ JSON Response ফেরত দেওয়া
FastAPI তে JSONResponse ব্যবহার করে আপনি কাস্টম স্ট্যাটাস কোড সহ JSON রেসপন্স ফেরত দিতে পারেন। এটি আপনাকে রেসপন্সের স্ট্যাটাস কোড, কনটেন্ট টাইপ, এবং অন্যান্য হেডার কাস্টমাইজ করার সুবিধা দেয়।
উদাহরণ: JSONResponse ব্যবহার করে কাস্টম স্ট্যাটাস কোড
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from fastapi import status
app = FastAPI()
@app.get("/custom_response/")
def custom_response():
content = {"message": "This is a custom response with status code 418"}
return JSONResponse(content=content, status_code=status.HTTP_418_IM_A_TEAPOT)
এখানে, 418 I'm a teapot স্ট্যাটাস কোড ব্যবহার করা হয়েছে, যা একটি হাস্যরসাত্মক HTTP স্ট্যাটাস কোড। এটি RFC 2324 এর অংশ এবং বাস্তব জগতের API-তে ব্যবহৃত হয় না, তবে এটি প্রদর্শন করতে এখানে ব্যবহার করা হয়েছে।
রেসপন্স:
{
"message": "This is a custom response with status code 418"
}
স্ট্যাটাস কোড: 418 I'm a teapot
Step 5: Redirecting with Status Codes
FastAPI তে আপনি কাস্টম রিডাইরেক্ট স্ট্যাটাস কোড সহ রিডাইরেক্ট করতে পারেন, যেমন 301 Moved Permanently বা 302 Found।
উদাহরণ: Redirecting with 301 Moved Permanently
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
from fastapi import status
app = FastAPI()
@app.get("/old-url/")
def redirect_to_new_url():
return RedirectResponse(url="/new-url/", status_code=status.HTTP_301_MOVED_PERMANENTLY)
এখানে, /old-url/ রিকোয়েস্ট পাঠালে এটি 301 Moved Permanently স্ট্যাটাস কোড সহ /new-url/ রিডাইরেক্ট করবে।
রেসপন্স:
301 Moved Permanently
URL: /new-url/
Step 6: Response Status Code with Response Object
FastAPI তে Response ক্লাস ব্যবহার করে আপনি কাস্টম স্ট্যাটাস কোড এবং কনটেন্ট টাইপ সহ রেসপন্স ফেরত দিতে পারেন। এটি আরও শক্তিশালী এবং যেকোনো কাস্টম হেডার এবং কনটেন্ট টাইপ সহজেই কাস্টমাইজ করতে সহায়ক।
উদাহরণ: Response Object ব্যবহার
from fastapi import FastAPI
from fastapi.responses import Response
from fastapi import status
app = FastAPI()
@app.get("/text-response/")
def text_response():
return Response(content="Custom Text Response", status_code=status.HTTP_200_OK, media_type="text/plain")
এখানে, রেসপন্সের কনটেন্ট টাইপ text/plain হিসেবে সেট করা হয়েছে এবং 200 OK স্ট্যাটাস কোড ফেরত দেওয়া হয়েছে।
রেসপন্স:
Custom Text Response
স্ট্যাটাস কোড: 200 OK
FastAPI তে Response Status Codes কাস্টমাইজ করা অত্যন্ত সহজ এবং অত্যন্ত কার্যকর। আপনি সহজেই 200 OK, 201 Created, 400 Bad Request, 404 Not Found ইত্যাদি স্ট্যাটাস কোড ব্যবহার করতে পারেন, এবং HTTPException, JSONResponse, Response ব্যবহার করে কাস্টম স্ট্যাটাস কোড সহ রেসপন্স পাঠাতে পারেন। এটি API-এর আচরণ এবং ত্রুটি হ্যান্ডলিংকে আরও নমনীয় এবং কার্যকর করে তোলে।
FastAPI তে JSON Response এবং Custom Response Formats খুবই সহজ এবং শক্তিশালী উপায়ে কনফিগার করা যায়। FastAPI স্বয়ংক্রিয়ভাবে JSON ফরম্যাটে রেসপন্স প্রদান করে, তবে আপনি কাস্টম রেসপন্স ফরম্যাটও ব্যবহার করতে পারেন।
এখানে JSON রেসপন্স এবং কাস্টম রেসপন্স ফরম্যাট তৈরি করার উপায় নিয়ে আলোচনা করা হবে।
JSON Response
FastAPI ডিফল্টভাবে JSON রেসপন্স প্রদান করে, যেহেতু এটি HTTP application/json কনটেন্ট টাইপের মাধ্যমে রেসপন্স ফেরত পাঠায়। আপনি কোনো ডাটা ফেরত দিলে FastAPI তা স্বয়ংক্রিয়ভাবে JSON-এ রূপান্তরিত করে রেসপন্স হিসেবে প্রদান করবে।
উদাহরণ: JSON Response
from fastapi import FastAPI
app = FastAPI()
@app.get("/json_response/")
def json_response():
return {"message": "This is a JSON response", "status": "success"}
এখানে, /json_response/ এন্ডপয়েন্টটি JSON রেসপন্স প্রদান করবে।
রেসপন্স উদাহরণ:
{
"message": "This is a JSON response",
"status": "success"
}
এই রেসপন্সের কনটেন্ট টাইপ application/json হবে এবং FastAPI এটি স্বয়ংক্রিয়ভাবে JSON ফরম্যাটে রূপান্তরিত করবে।
Custom Response Formats
যেহেতু FastAPI JSON রেসপন্সের জন্য ডিফল্টভাবে সেট করা থাকে, আপনি যদি কাস্টম রেসপন্স ফরম্যাট (যেমন, XML, HTML, Plain Text, ইত্যাদি) প্রয়োজন মনে করেন, তবে FastAPI তে এটি করতে পারা যায়। এর জন্য আপনি Response বা JSONResponse এর মতো কাস্টম রেসপন্স ক্লাস ব্যবহার করতে পারেন।
১. Text Response
আপনি যদি Plain Text রেসপন্স পাঠাতে চান, তবে PlainTextResponse ব্যবহার করতে পারেন।
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse
app = FastAPI()
@app.get("/text_response/", response_class=PlainTextResponse)
def text_response():
return "This is a plain text response"
এখানে response_class=PlainTextResponse ব্যবহার করা হয়েছে যাতে রেসপন্স প্লেইন টেক্সট ফরম্যাটে ফিরে আসে।
রেসপন্স উদাহরণ:
This is a plain text response
২. HTML Response
HTML রেসপন্স পাঠানোর জন্য HTMLResponse ক্লাস ব্যবহার করা হয়। এটি HTML কনটেন্টকে প্রপারলি রেন্ডার করে ব্রাউজারে প্রদর্শন করবে।
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get("/html_response/", response_class=HTMLResponse)
def html_response():
html_content = """
<html>
<head>
<title>HTML Response</title>
</head>
<body>
<h1>This is an HTML response</h1>
</body>
</html>
"""
return html_content
এখানে response_class=HTMLResponse ব্যবহার করা হয়েছে, যা HTML ফরম্যাটে রেসপন্স প্রদান করবে।
রেসপন্স উদাহরণ (HTML):
<html>
<head>
<title>HTML Response</title>
</head>
<body>
<h1>This is an HTML response</h1>
</body>
</html>
৩. XML Response
FastAPI তে XML রেসপন্স কাস্টমভাবে তৈরি করতে Response ক্লাস ব্যবহার করা হয় এবং XML কনটেন্ট টাইপ সেট করা হয়।
from fastapi import FastAPI
from fastapi.responses import Response
app = FastAPI()
@app.get("/xml_response/")
def xml_response():
xml_content = """
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
"""
return Response(content=xml_content, media_type="application/xml")
এখানে, আমরা XML ডাটা ফেরত পাঠাতে Response ক্লাস ব্যবহার করেছি এবং কনটেন্ট টাইপ হিসেবে application/xml সেট করেছি।
রেসপন্স উদাহরণ (XML):
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Custom JSON Response
আপনি যদি কোনো JSON ডাটা কাস্টমাইজ করতে চান এবং তার সাথে অতিরিক্ত কনটেন্ট বা মেটাডেটা যোগ করতে চান, তাহলে JSONResponse ব্যবহার করতে পারেন।
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/custom_json_response/")
def custom_json_response():
content = {"message": "This is a custom JSON response", "status": "success"}
return JSONResponse(content=content, headers={"X-Custom-Header": "CustomValue"})
এখানে, JSONResponse ক্লাস ব্যবহার করে কাস্টম JSON ডাটা এবং অতিরিক্ত header যোগ করা হয়েছে।
রেসপন্স:
{
"message": "This is a custom JSON response",
"status": "success"
}
Headers:
X-Custom-Header: CustomValue
Custom Status Codes
FastAPI-তে রেসপন্সের HTTP status code কাস্টমাইজ করা খুবই সহজ। আপনি status_code প্যারামিটার ব্যবহার করে রেসপন্সের স্ট্যাটাস কোড সেট করতে পারেন।
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/status_code_example/")
def status_code_example():
content = {"message": "This is a custom status code response"}
return JSONResponse(content=content, status_code=201)
এখানে, status_code=201 ব্যবহার করে আমরা 201 Created স্ট্যাটাস কোড প্রদান করছি।
রেসপন্স:
{
"message": "This is a custom status code response"
}
Status Code: 201 (Created)
Response Model
FastAPI তে আপনি রেসপন্সের জন্য মডেল (যেমন Pydantic Model) ব্যবহার করতে পারেন, যা JSON ডাটাকে ভ্যালিডেট এবং ডকুমেন্ট করার জন্য সাহায্য করে।
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.responses import JSONResponse
app = FastAPI()
class ItemResponse(BaseModel):
item_name: str
item_price: float
@app.get("/item_response/", response_model=ItemResponse)
def item_response():
return JSONResponse(content={"item_name": "Laptop", "item_price": 1500.00})
এখানে, response_model ব্যবহার করা হয়েছে, যা API ডকুমেন্টেশন স্বয়ংক্রিয়ভাবে তৈরি করতে সাহায্য করে এবং রেসপন্স ডাটাকে ভ্যালিডেট করে।
রেসপন্স:
{
"item_name": "Laptop",
"item_price": 1500.00
}
FastAPI তে JSON Response এবং Custom Response Formats তৈরি করা সহজ এবং কার্যকর। FastAPI আপনাকে JSON, HTML, Text, XML, এবং অন্যান্য কাস্টম রেসপন্স ফরম্যাট তৈরি এবং কনফিগার করার জন্য অনেক সুবিধা প্রদান করে। আপনি সহজেই API রেসপন্স কাস্টমাইজ করতে পারেন এবং ইনপুট ডাটা ফরম্যাটের ওপর ভিত্তি করে বিভিন্ন ধরনের রেসপন্স প্রদান করতে পারেন।
FastAPI তে HTML Response এবং Streaming Response তৈরি করা খুবই সহজ এবং কার্যকর। HTML Response সাধারণত ওয়েব পেজ রেন্ডার করার জন্য ব্যবহৃত হয়, এবং Streaming Response ব্যবহার করা হয় ডাটা ধীরে ধীরে পাঠানোর জন্য, যেমন বড় ফাইল বা ডাটা সেন্টারের জন্য, যা একে একে পাঠানো হয়।
HTML Response তৈরি করা
FastAPI তে HTML Response তৈরি করতে, HTMLResponse ব্যবহার করা হয়। আপনি HTML কোড সরাসরি রিটার্ন করতে পারেন অথবা Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করে ডাইনামিক HTML পেজ তৈরি করতে পারেন।
উদাহরণ: HTML Response সরাসরি পাঠানো
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get("/", response_class=HTMLResponse)
def get_home_page():
html_content = """
<html>
<head><title>My FastAPI App</title></head>
<body>
<h1>Welcome to FastAPI!</h1>
<p>This is an HTML response.</p>
</body>
</html>
"""
return html_content
এখানে, HTMLResponse ব্যবহার করে একটি সরাসরি HTML পেজ রিটার্ন করা হয়েছে।
রেসপন্স:
<html>
<head><title>My FastAPI App</title></head>
<body>
<h1>Welcome to FastAPI!</h1>
<p>This is an HTML response.</p>
</body>
</html>
Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করা
FastAPI তে ডাইনামিক HTML পেজ তৈরি করতে Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করা যায়। এটি আপনাকে টেমপ্লেটের মধ্যে ভ্যারিয়েবল ইন্সার্ট করার সুযোগ দেয় এবং HTML কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
উদাহরণ: Jinja2 ব্যবহার করে HTML Response তৈরি
প্রথমে jinja2 ইনস্টল করতে হবে:
pip install jinja2
তারপর, Jinja2Templates ব্যবহার করে HTML পেজ তৈরি করা হয়।
from fastapi import FastAPI
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse
from starlette.requests import Request
app = FastAPI()
# টেমপ্লেট ডিরেক্টরি
templates = Jinja2Templates(directory="templates")
@app.get("/greet/{name}", response_class=HTMLResponse)
def greet(request: Request, name: str):
return templates.TemplateResponse("greet.html", {"request": request, "name": name})
এখানে, greet.html টেমপ্লেট ব্যবহার করা হচ্ছে, যা একটি ডাইনামিক HTML পেজ তৈরি করবে।
greet.html টেমপ্লেট উদাহরণ (templates/greet.html):
<!DOCTYPE html>
<html>
<head><title>Greeting Page</title></head>
<body>
<h1>Hello, {{ name }}!</h1>
<p>Welcome to FastAPI with Jinja2 template engine.</p>
</body>
</html>
এখানে, {{ name }} হলো একটি টেমপ্লেট ভ্যারিয়েবল যা প্যারামিটার থেকে ডাইনামিকভাবে আসবে।
রিকোয়েস্ট উদাহরণ:
GET /greet/John
রেসপন্স:
<!DOCTYPE html>
<html>
<head><title>Greeting Page</title></head>
<body>
<h1>Hello, John!</h1>
<p>Welcome to FastAPI with Jinja2 template engine.</p>
</body>
</html>
Streaming Response তৈরি করা
Streaming Response এমন একটি রেসপন্স, যেখানে ডাটা ধীরে ধীরে পাঠানো হয়, যা সাধারণত বড় ফাইল বা ডাটা সেন্টার থেকে আসা ডাটার জন্য ব্যবহৃত হয়। FastAPI তে StreamingResponse ক্লাস ব্যবহার করে এই ধরণের রেসপন্স তৈরি করা যায়।
উদাহরণ: File Streaming Response
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import io
app = FastAPI()
@app.get("/streamfile")
def stream_file():
# একটি ছোট ডাটা স্ট্রিম তৈরি করা
data = b"Hello, this is a large file content.\n" * 10000
file_like_object = io.BytesIO(data)
# StreamingResponse ব্যবহার করে ফাইল স্ট্রিম পাঠানো
return StreamingResponse(file_like_object, media_type="text/plain")
এখানে, io.BytesIO ব্যবহার করে একটি ফাইলের মত একটি স্ট্রিম তৈরি করা হয়েছে, যা StreamingResponse এর মাধ্যমে পাঠানো হচ্ছে।
রিকোয়েস্ট উদাহরণ:
GET /streamfile
রেসপন্স:
Hello, this is a large file content.
Hello, this is a large file content.
...
এখানে, স্ট্রিমিং রেসপন্সের মাধ্যমে বড় ফাইল বা ডাটা পাঠানো হচ্ছে, যা ধীরে ধীরে কনজিউমারকে পাঠানো হয়।
File Streaming from Disk
আপনি ফাইল স্ট্রিম করতে পারেন যা ডিস্ক থেকে সরাসরি পাঠানো হবে।
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import os
app = FastAPI()
@app.get("/streamfile/{file_name}")
def stream_file(file_name: str):
file_path = f"files/{file_name}" # files ডিরেক্টরির মধ্যে ফাইল
file_like_object = open(file_path, mode="rb")
return StreamingResponse(file_like_object, media_type="application/octet-stream")
এখানে, ফাইল ডিস্ক থেকে সরাসরি পড়ে স্ট্রিম করা হচ্ছে।
রিকোয়েস্ট উদাহরণ:
GET /streamfile/example.txt
রেসপন্স:
যে ফাইলটি আপলোড করা হয়েছে, সেটি ধীরে ধীরে স্ট্রিম করা হবে।
FastAPI তে HTML Response এবং Streaming Response তৈরি করা সহজ এবং কার্যকর। আপনি Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করে ডাইনামিক HTML পেজ তৈরি করতে পারেন, এবং StreamingResponse ব্যবহার করে বড় ফাইল বা ডাটা স্ট্রিমিং করতে পারেন। এই বৈশিষ্ট্যগুলি আপনাকে আরও প্রোফেশনাল এবং স্কেলেবল অ্যাপ্লিকেশন তৈরি করতে সহায়ক হবে।
Read more