Request Body এর মাধ্যমে Complex Data হ্যান্ডলিং

Web Development - ফাস্টএপিআই (FastAPI) - Request Body এবং Form Handling
193

FastAPI-তে Request Body এর মাধ্যমে Complex Data হ্যান্ডলিং করা অত্যন্ত সহজ এবং কার্যকর। Pydantic মডেল ব্যবহার করে আমরা খুব সহজেই Nested Models, Lists, Dictionaries এবং অন্যান্য জটিল ডাটা স্ট্রাকচার হ্যান্ডল করতে পারি। FastAPI স্বয়ংক্রিয়ভাবে ইনপুট ডাটার টাইপ যাচাই, ভ্যালিডেশন, এবং ডেসিরিয়ালাইজেশন করে।

এখানে আমরা দেখব কিভাবে FastAPI তে Complex Data Structures যেমন Nested Models, List of Objects, Dictionaries, এবং অন্যান্য জটিল ডাটা হ্যান্ডলিং করা যায়।


Step 1: Nested Models (অন্য মডেলের মধ্যে মডেল)

FastAPI তে আপনি একটি মডেলের মধ্যে অন্য মডেল ব্যবহার করতে পারেন (Nested Models)। এর মাধ্যমে আপনি জটিল ডাটা স্ট্রাকচার তৈরি করতে পারবেন।

উদাহরণ: Nested Models

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# Manufacturer Model
class Manufacturer(BaseModel):
    name: str
    country: str

# Item Model (Nested Model)
class Item(BaseModel):
    name: str
    price: float
    manufacturer: Manufacturer

@app.post("/items/")
def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price, "manufacturer": item.manufacturer}

এখানে, Item মডেলে Manufacturer মডেলটি nested হিসেবে ব্যবহৃত হয়েছে।

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

{
  "name": "Laptop",
  "price": 1500.00,
  "manufacturer": {
    "name": "TechCorp",
    "country": "USA"
  }
}

রেসপন্স:

{
  "item_name": "Laptop",
  "item_price": 1500.00,
  "manufacturer": {
    "name": "TechCorp",
    "country": "USA"
  }
}

Step 2: List of Objects (Object এর তালিকা)

FastAPI তে আপনি List বা Array এর মধ্যে একাধিক মডেল ব্যবহার করতে পারেন। এটি ডাটা লিস্ট বা অ্যারের মাধ্যমে ইনপুট গ্রহণের জন্য খুবই কার্যকর।

উদাহরণ: List of Objects

from fastapi import FastAPI
from pydantic import BaseModel
from typing import List

app = FastAPI()

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

@app.post("/items/")
def create_items(items: List[Item]):
    return {"items": items}

এখানে, List[Item] ব্যবহার করা হয়েছে, যা ইনপুট হিসাবে একাধিক Item অবজেক্ট গ্রহণ করবে।

রিকোয়েস্ট উদাহরণ (List of Objects):

[
  {"name": "Laptop", "price": 1500.00},
  {"name": "Smartphone", "price": 800.00}
]

রেসপন্স:

{
  "items": [
    {"name": "Laptop", "price": 1500.00},
    {"name": "Smartphone", "price": 800.00}
  ]
}

Step 3: Dictionary of Objects (অবজেক্টের ডিকশনারি)

FastAPI তে Dictionary বা Map এর মধ্যে key-value পেয়ার হিসেবে ডাটা গ্রহণ করতে পারেন। এর মাধ্যমে আপনি key এবং value এর মাধ্যমে complex data structures তৈরি করতে পারেন।

উদাহরণ: Dictionary of Objects

from fastapi import FastAPI
from pydantic import BaseModel
from typing import Dict

app = FastAPI()

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

@app.post("/items/")
def create_items(items: Dict[str, Item]):
    return {"items": items}

এখানে, Dict[str, Item] ব্যবহার করা হয়েছে, যা key হিসেবে স্ট্রিং এবং value হিসেবে Item মডেল গ্রহণ করবে।

রিকোয়েস্ট উদাহরণ (Dictionary of Objects):

{
  "item1": {"name": "Laptop", "price": 1500.00},
  "item2": {"name": "Smartphone", "price": 800.00}
}

রেসপন্স:

{
  "items": {
    "item1": {"name": "Laptop", "price": 1500.00},
    "item2": {"name": "Smartphone", "price": 800.00}
  }
}

Step 4: Mixed Complex Data (নেস্টেড ডাটা, লিস্ট এবং ডিকশনারি)

FastAPI তে Mixed Complex Data ব্যবহার করে আপনি একসাথে Nested Models, Lists, এবং Dictionaries ব্যবহার করতে পারেন।

উদাহরণ: Mixed Complex Data

from fastapi import FastAPI
from pydantic import BaseModel
from typing import List, Dict

app = FastAPI()

# Manufacturer Model
class Manufacturer(BaseModel):
    name: str
    country: str

# Item Model
class Item(BaseModel):
    name: str
    price: float
    manufacturer: Manufacturer

# Order Model (Nested, List, Dictionary)
class Order(BaseModel):
    order_id: int
    items: List[Item]
    shipping_address: Dict[str, str]

@app.post("/orders/")
def create_order(order: Order):
    return {"order_id": order.order_id, "items": order.items, "shipping_address": order.shipping_address}

এখানে, Order মডেলটি একসাথে Item, List, এবং Dictionary মডেলগুলোর সংমিশ্রণ করেছে।

রিকোয়েস্ট উদাহরণ (Mixed Complex Data):

{
  "order_id": 123,
  "items": [
    {"name": "Laptop", "price": 1500.00, "manufacturer": {"name": "TechCorp", "country": "USA"}},
    {"name": "Smartphone", "price": 800.00, "manufacturer": {"name": "MobileTech", "country": "China"}}
  ],
  "shipping_address": {
    "street": "123 Main St",
    "city": "New York",
    "zip": "10001"
  }
}

রেসপন্স:

{
  "order_id": 123,
  "items": [
    {"name": "Laptop", "price": 1500.00, "manufacturer": {"name": "TechCorp", "country": "USA"}},
    {"name": "Smartphone", "price": 800.00, "manufacturer": {"name": "MobileTech", "country": "China"}}
  ],
  "shipping_address": {
    "street": "123 Main St",
    "city": "New York",
    "zip": "10001"
  }
}

Step 5: Validation and Constraints on Complex Data

FastAPI এবং Pydantic এর মাধ্যমে Complex Data এর জন্য validation এবং constraints ব্যবহার করা যায়। যেমন, min_length, max_length, gt, lt, regex ইত্যাদি।

উদাহরণ: Validation with Constraints on Complex Data

from pydantic import BaseModel, Field
from typing import List

class Item(BaseModel):
    name: str = Field(..., min_length=3)
    price: float = Field(..., gt=0)

class Order(BaseModel):
    order_id: int
    items: List[Item]
    shipping_address: str

@app.post("/orders/")
def create_order(order: Order):
    return {"order_id": order.order_id, "items": order.items, "shipping_address": order.shipping_address}

এখানে:

  • name: ৩টি অক্ষরের কম হবে না (min_length=3)।
  • price: ০ এর বেশি হতে হবে (gt=0)।

FastAPI তে Request Body এর মাধ্যমে Complex Data হ্যান্ডলিং একটি শক্তিশালী বৈশিষ্ট্য। Pydantic মডেল ব্যবহার করে আপনি সহজেই Nested Models, Lists, Dictionaries, এবং Mixed Data Structures হ্যান্ডল করতে পারেন। এছাড়াও, ইনপুট ডাটার জন্য validation এবং constraints ব্যবহার করে ডাটা প্রক্রিয়া আরও নিরাপদ এবং নির্ভুল করা যায়। FastAPI এই সমস্ত ডাটা মডেলিং এবং হ্যান্ডলিং অপারেশনকে খুব সহজ ও দ্রুত করে তোলে।

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

Are you sure to start over?

Loading...