FastAPI CRUD 스타터
FastAPI로 만드는 RESTful CRUD API 보일러플레이트. Pydantic 모델, 라우터, 예외 처리 포함.
from fastapi import FastAPI, HTTPException, status
from pydantic import BaseModel
from typing import Optional, List
app = FastAPI(title="My API", version="1.0.0", docs_url="/docs")
class Item(BaseModel):
id: Optional[int] = None
name: str
description: Optional[str] = None
price: float
is_active: bool = True
items_db: List[Item] = []
@app.get("/", tags=["health"])
def root():
return {"message": "API is running", "docs": "/docs"}
@app.get("/items", response_model=List[Item], tags=["items"])
def list_items():
return items_db
@app.get("/items/{item_id}", response_model=Item, tags=["items"])
def get_item(item_id: int):
for item in items_db:
if item.id == item_id:
return item
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Item not found")
@app.post("/items", response_model=Item, status_code=status.HTTP_201_CREATED, tags=["items"])
def create_item(item: Item):
item.id = len(items_db) + 1
items_db.append(item)
return item
@app.put("/items/{item_id}", response_model=Item, tags=["items"])
def update_item(item_id: int, payload: Item):
for i, item in enumerate(items_db):
if item.id == item_id:
payload.id = item_id
items_db[i] = payload
return payload
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Item not found")
@app.delete("/items/{item_id}", status_code=status.HTTP_204_NO_CONTENT, tags=["items"])
def delete_item(item_id: int):
for i, item in enumerate(items_db):
if item.id == item_id:
items_db.pop(i)
return
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Item not found")