코드는 여기에서 찾을 수 있습니다: GitHub - jamesbmour/blog_tutorials:
이전 게시물에서는 FastAPI를 소개하고 기본적인 프로젝트 구조를 설정했습니다. 이제 기능적인 Todo API를 구축하여 한 단계 더 발전해 보겠습니다. 이 튜토리얼이 끝나면 할 일 항목을 생성, 읽기, 업데이트 및 삭제할 수 있는 작업 백엔드를 갖게 됩니다.
할 일을 관리하려면 할 일 항목을 나타내는 데이터 모델을 정의해야 합니다. FastAPI는 Pydantic 모델을 사용하여 데이터를 검증하고 구문 분석하므로 여기서 이를 활용하겠습니다.
Pydantic을 사용하여 두 가지 모델을 만들겠습니다.
from pydantic import BaseModel from typing import Optional from datetime import datetime class TodoCreate(BaseModel): title: str description: Optional[str] = None completed: bool = False class Todo(BaseModel): id: str title: str description: Optional[str] = None completed: bool created_at: datetime
CRUD는 데이터 관리를 위한 4가지 기본 작업인 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)를 의미합니다. 이 튜토리얼에서는 인메모리 데이터베이스(간단한 목록)를 사용하여 이러한 작업을 구현합니다.
목록을 사용하여 할 일을 저장하겠습니다. 단순화를 위해 몇 가지 할 일 예시도 추가하겠습니다.
from uuid import uuid4 from datetime import datetime todos = [ { "id": str(uuid4()), "title": "Learn FastAPI", "description": "Go through the official FastAPI documentation and tutorials.", "completed": False, "created_at": datetime.now(), }, { "id": str(uuid4()), "title": "Build a Todo API", "description": "Create a REST API for managing todo items using FastAPI.", "completed": False, "created_at": datetime.now(), }, { "id": str(uuid4()), "title": "Write blog post", "description": "Draft a blog post about creating a Todo API with FastAPI.", "completed": False, "created_at": datetime.now(), }, ]
ID로 할일을 찾는 간단한 도우미 기능을 구현하겠습니다.
def get_todo_by_id(todo_id: str): for todo in todos: if todo["id"] == todo_id: return todo return None
POST 엔드포인트를 사용하면 사용자가 새 할 일 항목을 만들 수 있습니다.
@app.post("/todos/", response_model=Todo) def create_todo(todo: TodoCreate): new_todo = Todo( id=str(uuid4()), title=todo.title, description=todo.description, completed=todo.completed, created_at=datetime.now() ) todos.append(new_todo.dict()) return new_todo
GET 엔드포인트는 인메모리 데이터베이스에서 모든 할일을 검색합니다.
@app.get("/todos/", response_model=List[Todo]) def get_all_todos(): return todos
GET 엔드포인트를 사용하면 해당 ID로 단일 할 일을 검색할 수 있습니다.
@app.get("/todos/{todo_id}", response_model=Todo) def get_todo(todo_id: str): todo = get_todo_by_id(todo_id) if not todo: raise HTTPException(status_code=404, detail="Todo not found") return todo
PUT 엔드포인트를 사용하면 사용자가 기존 할 일을 업데이트할 수 있습니다.
@app.put("/todos/{todo_id}", response_model=Todo) def update_todo(todo_id: str, todo_data: TodoCreate): todo = get_todo_by_id(todo_id) if not todo: raise HTTPException(status_code=404, detail="Todo not found") todo["title"] = todo_data.title todo["description"] = todo_data.description todo["completed"] = todo_data.completed return Todo(**todo)
DELETE 엔드포인트를 사용하면 사용자가 해당 ID로 할 일을 삭제할 수 있습니다.
@app.delete("/todos/{todo_id}") def delete_todo(todo_id: str): todo = get_todo_by_id(todo_id) if not todo: raise HTTPException(status_code=404, detail="Todo not found") todos.remove(todo) return {"detail": "Todo deleted successfully"}
FastAPI는 우리가 정의한 Pydantic 모델에 대해 입력 데이터의 유효성을 자동으로 검증합니다. 이를 통해 데이터가 처리되기 전에 예상 스키마를 충족하는지 확인할 수 있습니다.
예외 핸들러를 추가하여 오류 응답을 맞춤설정할 수 있습니다.
@app.exception_handler(HTTPException) def http_exception_handler(request, exc: HTTPException): return JSONResponse( status_code=exc.status_code, content={"detail": exc.detail}, )
FastAPI는 대화형 Swagger UI 문서와 함께 제공되므로 API 엔드포인트를 쉽게 테스트할 수 있습니다. 간단히 애플리케이션을 실행하고 브라우저에서 /docs로 이동하세요.
애플리케이션이 커짐에 따라 코드를 체계적으로 정리하는 것이 중요합니다. 다음은 몇 가지 팁입니다.
Pydantic 모델을 models.py 파일로 이동하여 기본 애플리케이션 파일을 깔끔하게 유지할 수 있습니다.
특히 API가 성장함에 따라 할일 관련 엔드포인트에 대해 별도의 라우터를 만드는 것을 고려해보세요.
다음 게시물에서는 실제 데이터베이스(예: SQLite 또는 PostgreSQL)를 FastAPI 애플리케이션에 통합하겠습니다. 사용자 인증이나 좀 더 고급 기능에 대해서도 살펴보도록 하겠습니다.
이 튜토리얼에서는 FastAPI를 사용하여 간단한 Todo API를 구축했습니다. 우리는 데이터 모델 설계, CRUD 작업 구현, 할일 관리를 위한 엔드포인트 생성으로 시작했습니다. 또한 입력 유효성 검사, 오류 처리 및 테스트에 대해서도 다루었습니다. 이러한 기반을 통해 API를 더욱 확장하거나 프런트엔드와 통합하여 완전한 애플리케이션을 만들 수 있습니다.
제 글을 응원하고 싶거나 맥주 한 잔 사주고 싶으시다면:
https://buymeacoffee.com/bmours
위 내용은 FastAPI를 사용하여 Todo API 구축하기: 단계별 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!