FastAPI는 Python의 타입 힌트 기반 고성능 웹 API 프레임워크다. Starlette(ASGI)와 Pydantic을 기반으로 자동 OpenAPI 문서 생성, 비동기 처리, 데이터 검증을 기본 제공하며 Node.js와 Go에 버금가는 성능을 낸다.
기본 예제
python
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel
from typing import Optional
app = FastAPI(title="My API", version="1.0.0")
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None
@app.get("/items/{item_id}", response_model=Item)
async def get_item(item_id: int, q: Optional[str] = None):
if item_id > 1000:
raise HTTPException(status_code=404, detail="Item not found")
return Item(name=f"Item {item_id}", price=9.99)
@app.post("/items/", response_model=Item, status_code=201)
async def create_item(item: Item):
return item
python
from fastapi import Depends
from sqlalchemy.orm import Session
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.get("/users/{user_id}")
async def get_user(user_id: int, db: Session = Depends(get_db)):
user = db.query(User).filter(User.id == user_id).first()
if not user:
raise HTTPException(status_code=404)
return user
비동기 처리
python
import httpx
@app.get("/external-data")
async def fetch_external():
async with httpx.AsyncClient() as client:
response = await client.get("https://api.example.com/data")
return response.json()
주요 기능
| 기능 | 설명 |
|---|
| 자동 문서화 | /docs (Swagger), /redoc 자동 생성 |
| 데이터 검증 | Pydantic으로 요청/응답 자동 검증 |
| ASGI | 비동기 I/O 지원 (uvicorn) |
| OpenAPI | 스키마 자동 생성 |
관련 개념