
FastAPIμμ Request Bodyλ ν΄λΌμ΄μΈνΈκ° μλ²λ‘ 보λ΄λ βμ€μ λ°μ΄ν°βλ₯Ό λ΄λ μμμ΄λ€.
HTTP μμ²(Request)μ ν¬κ² λ λΆλΆμΌλ‘ λλλ€.
| κ΅¬μ± | μν |
|---|---|
| Header | λ©ν μ 보 (μΈμ¦, νμ λ±) |
| Body | μ€μ λ°μ΄ν° |
μλ₯Ό λ€λ©΄:
λ±μ λͺ¨λ Request Bodyλ‘ μ λ¬λλ€.
Request Bodyλ μ무 μμ²μλ μ°μ΄μ§ μλλ€.
| HTTP λ©μλ | Request Body μ¬μ© |
|---|---|
| GET | β κΆμ₯λμ§ μμ |
| POST | β μ¬μ© |
| PUT | β μ¬μ© |
| PATCH | β μ¬μ© |
| DELETE | β οΈ κ²½μ°μ λ°λΌ μ¬μ© |
fastapi-body/ ββ main.py ββ requirements.txt
# requirements.txt
fastapi[standard]
pydantic
pip install -r requirements.txt
FastAPIμμλ Pydantic λͺ¨λΈμ μ¬μ©ν΄ Request Body ꡬ쑰λ₯Ό μ μνλ€.
# main.py
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return {
"item": item,
"status": "done"
}
π Swagger UIμμ μ€μ΅ν΄λ³΄κΈ°
ν΄λΉ JSONμ Request Bodyμ μ
λ ₯
{
"name": "λ
ΈνΈλΆ",
"description": "κ°λ°μ© λ§₯λΆ",
"price": 2500000,
"tax": 250000
}
κ²°κ³Ό:
μλ΅μ μ°μλ item κ°μ²΄κ° jsonμΌλ‘ μ§λ ¬ν λμλ€.
Pydanticμ΄λ
Pydanticμ Pythonμ λ°μ΄ν° κ²μ¦ λΌμ΄λΈλ¬λ¦¬λ‘,"pedantic(κΉλ€λ‘μ΄)"μ΄λΌλ λ¨μ΄μμ μ λνλ€.
λ°μ΄ν° νμ
μ κΉλ€λ‘κ² κ²μ¬ν΄μ€λ€λ μλ―Έλ₯Ό λ΄κ³ μμ.
FastAPIλ Pydanticμ μ¬μ©ν΄μ Request Bodyμ λ°μ΄ν°λ₯Ό μλμΌλ‘ κ²μ¦νλ€.
λͺ¨λΈ μ μ:
from pydantic import BaseModel
class Item(BaseModel):
name: str # νμ: νμ
μ κΈ°λ³Έκ°μ΄ μμΌλ©΄ μμ² ν λ κ°μ λ°λμ μ
λ ₯λ°μμΌ ν΅κ³Όλ¨.
description: str | None = None # μ ν: νμ
μ κΈ°λ³Έκ°μ΄ μκΈ° λλ¬Έ.
price: float # νμ
tax: float | None = None # μ ν
| μ μΈ λ°©μ | μλ―Έ |
|---|---|
name: str |
νμ (λ°λμ μ λ¬) |
description: str | None = None |
μ ν (μμ΄λ OK) |
@app.post("/items/")
async def create_item(item: Item):
item_dict = item.model_dump() # 1. λͺ¨λΈ β λμ
λ리 λ³ν
if item.tax is not None:
price_with_tax = item.price + item.tax # 2. λͺ¨λΈ μμ±μΌλ‘ κ³μ°
item_dict.update({"price_with_tax": price_with_tax}) # 3. μ νλ μΆκ°
return item_dict # 4. νμ₯λ λμ
λ리 λ°ν
| λ°©μ | λ¬Έμ μ |
|---|---|
dict |
μλμμ± β, νμ μμ μ± β |
| Pydantic λͺ¨λΈ | μλμμ± β , νμ μμ μ± β |
item.price μ²λΌ μ (.) μ κ·Όμ΄ κ°λ₯νκ³
IDEκ° νμ
μ μ΄ν΄νκΈ° λλ¬Έμ μ€μκ° κΈκ²©ν μ€μ΄λ λ€.
μμ² JSON β FastAPI μμ β Pydantic λͺ¨λΈ λ§€ν β νμ λ³ν + κ²μ¦ β ν¨μ μ€ν β Response Body λ°ν
FastAPIλ νλΌλ―Έν°μ μμΉμ νμ λ§ λ³΄κ³ μ΄λμ λ°μ΄ν°λ₯Ό κ°μ Έμ¬μ§ μλμΌλ‘ νλ¨νλ€.
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
return {
"item_id": item_id,
**item.model_dump()
}
@app.put("/items/{item_id}")
async def update_item(
item_id: int,
item: Item,
q: str | None = None
):
result = {
"item_id": item_id,
**item.model_dump()
}
if q:
result["q"] = q
return result
| 쑰건 | νλ³ κ²°κ³Ό |
|---|---|
| URL κ²½λ‘μ ν¬ν¨ | Path Parameter |
| Pydantic λͺ¨λΈ νμ | Request Body |
| λ¨μ νμ (int, str λ±) | Query Parameter |
Client JSON β FastAPI μμ β Pydantic λͺ¨λΈ λ§€ν β νμ λ³ν + κ²μ¦ β λΉμ¦λμ€ λ‘μ§ β Response Body