fastapi-python은(는) 무엇을 하나요?
FastAPI Python 개발 전문가: API 및 비동기 작업을 위한 모범 사례 제공
개요
이 스킬은 FastAPI 프레임워크를 사용하여 Python으로 웹 API를 개발하는 AI 에이전트를 위한 것입니다. FastAPI의 주요 기능과 모범 사례를 활용하여 고성능, 확장 가능한 API를 구축하는 방법을 제공합니다.
주요 특징
- 비동기 지원:
async def를 사용한 비동기 엔드포인트 작성 - 자동 문서화: Swagger UI 및 ReDoc을 통한 대화형 API 문서 자동 생성
- 데이터 검증: Pydantic 모델을 이용한 요청/응답 데이터 검증
- 의존성 주입: 의존성 주입 시스템을 통한 모듈성 향상
- 타입 힌트: Python 타입 힌트를 활용한 코드 안정성 보장
시작하기
설치
pip install fastapi uvicorn
기본 예제
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
서버 실행
uvicorn main:app --reload
엔드포인트 정의
FastAPI는 다양한 HTTP 메서드를 지원합니다:
@app.get(): GET 요청@app.post(): POST 요청@app.put(): PUT 요청@app.delete(): DELETE 요청@app.patch(): PATCH 요청
경로 매개변수와 쿼리 매개변수
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
요청 본문
Pydantic 모델을 사용하여 요청 본문을 정의합니다:
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = False
@app.post("/items/")
async def create_item(item: Item):
return item
의존성 주입
의존성 주입을 통해 코드의 재사용성과 테스트 용이성을 높입니다:
from fastapi import Depends, FastAPI
app = FastAPI()
def get_db():
db = Database()
try:
yield db
finally:
db.close()
@app.get("/users/")
async def read_users(db=Depends(get_db)):
return db.get_users()
데이터베이스 통합
SQLAlchemy와 함께 사용하는 방법:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
테스트
FastAPI는 TestClient를 제공하여 간편한 테스트를 지원합니다:
from fastapi.testclient import TestClient
client = TestClient(app)
def test_read_main():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "Hello World"}
배포
Uvicorn, Gunicorn, 또는 Docker를 사용하여 배포할 수 있습니다:
uvicorn main:app --host 0.0.0.0 --port 8000