> 백엔드 개발 > 파이썬 튜토리얼 > FastAPI를 사용하여 Todo API 구축하기: 단계별 가이드

FastAPI를 사용하여 Todo API 구축하기: 단계별 가이드

王林
풀어 주다: 2024-08-28 18:32:24
원래의
346명이 탐색했습니다.

Part Building a Todo API with FastAPI: Step-by-Step Guide

FastAPI를 사용하여 Todo API 구축: 단계별 가이드

코드는 여기에서 찾을 수 있습니다: GitHub - jamesbmour/blog_tutorials:

I. 소개

이전 게시물에서는 FastAPI를 소개하고 기본적인 프로젝트 구조를 설정했습니다. 이제 기능적인 Todo API를 구축하여 한 단계 더 발전해 보겠습니다. 이 튜토리얼이 끝나면 할 일 항목을 생성, 읽기, 업데이트 및 삭제할 수 있는 작업 백엔드를 갖게 됩니다.

우리가 다룰 내용:

  • Todo 데이터 모델 설계
  • CRUD 작업 구현
  • API 엔드포인트 생성
  • 입력 검증 및 오류 처리 추가
  • API 테스트
  • 코드 리팩토링 및 구성

II. Todo 데이터 모델 설계

할 일을 관리하려면 할 일 항목을 나타내는 데이터 모델을 정의해야 합니다. FastAPI는 Pydantic 모델을 사용하여 데이터를 검증하고 구문 분석하므로 여기서 이를 활용하겠습니다.

A. Todo 스키마 정의

Pydantic을 사용하여 두 가지 모델을 만들겠습니다.

  • TodoCreate: 할 일을 생성하거나 업데이트할 때 입력 데이터용입니다.
  • Todo: id 및created_at와 같은 필드를 포함하는 전체 할 일 항목에 사용됩니다.
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

로그인 후 복사

B. 필드 설명

  • id: 각 할일의 고유 식별자입니다.
  • 제목: 할 일의 주요 내용
  • 설명: 추가 세부정보(선택 사항).
  • completed: 할 일의 부울 상태(완료 여부).
  • created_at: 할 일이 생성된 시간을 나타내는 타임스탬프입니다.

III. Todos를 위한 CRUD 작업 생성

CRUD는 데이터 관리를 위한 4가지 기본 작업인 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)를 의미합니다. 이 튜토리얼에서는 인메모리 데이터베이스(간단한 목록)를 사용하여 이러한 작업을 구현합니다.

A. 인메모리 데이터베이스 설정

목록을 사용하여 할 일을 저장하겠습니다. 단순화를 위해 몇 가지 할 일 예시도 추가하겠습니다.

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(),
    },
]

로그인 후 복사

B. 도우미 기능 구현

ID로 할일을 찾는 간단한 도우미 기능을 구현하겠습니다.

def get_todo_by_id(todo_id: str):
    for todo in todos:
        if todo["id"] == todo_id:
            return todo
    return None

로그인 후 복사

IV. API 엔드포인트 구현

A. 새로운 할 일 만들기

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

로그인 후 복사

B. 모든 할 일 검색

GET 엔드포인트는 인메모리 데이터베이스에서 모든 할일을 검색합니다.

@app.get("/todos/", response_model=List[Todo])
def get_all_todos():
    return todos

로그인 후 복사

C. 단일 Todo 검색

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

로그인 후 복사

D. 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)

로그인 후 복사

E. 할일 삭제

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"}

로그인 후 복사

V. 입력 유효성 검사 및 오류 처리 추가

A. Pydantic을 사용한 입력 검증

FastAPI는 우리가 정의한 Pydantic 모델에 대해 입력 데이터의 유효성을 자동으로 검증합니다. 이를 통해 데이터가 처리되기 전에 예상 스키마를 충족하는지 확인할 수 있습니다.

B. 사용자 정의 오류 처리

예외 핸들러를 추가하여 오류 응답을 맞춤설정할 수 있습니다.

@app.exception_handler(HTTPException)
def http_exception_handler(request, exc: HTTPException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail},
    )

로그인 후 복사

6. API 테스트

FastAPI는 대화형 Swagger UI 문서와 함께 제공되므로 API 엔드포인트를 쉽게 테스트할 수 있습니다. 간단히 애플리케이션을 실행하고 브라우저에서 /docs로 이동하세요.

테스트 예

  • Todo 만들기: 새 할 일을 만들어 POST 엔드포인트를 테스트하세요.
  • 할 일 검색: GET 엔드포인트를 사용하여 모든 할 일 또는 ID별로 특정 할 일을 가져옵니다.
  • 업데이트 및 삭제: PUT 및 DELETE 엔드포인트를 테스트하여 할 일을 업데이트하거나 제거합니다.

Ⅶ. 코드 리팩토링 및 구성

애플리케이션이 커짐에 따라 코드를 체계적으로 정리하는 것이 중요합니다. 다음은 몇 가지 팁입니다.

A. 모델을 별도의 파일로 이동

Pydantic 모델을 models.py 파일로 이동하여 기본 애플리케이션 파일을 깔끔하게 유지할 수 있습니다.

B. Todo 엔드포인트용 라우터 생성

특히 API가 성장함에 따라 할일 관련 엔드포인트에 대해 별도의 라우터를 만드는 것을 고려해보세요.

Ⅷ. 다음 단계

다음 게시물에서는 실제 데이터베이스(예: SQLite 또는 PostgreSQL)를 FastAPI 애플리케이션에 통합하겠습니다. 사용자 인증이나 좀 더 고급 기능에 대해서도 살펴보도록 하겠습니다.

제안된 개선 사항:

  • GET 엔드포인트에 필터링 및 페이지 매기기를 추가하세요.
  • 개인 할 일을 관리하려면 사용자 인증을 구현하세요.

Ⅸ. 결론

이 튜토리얼에서는 FastAPI를 사용하여 간단한 Todo API를 구축했습니다. 우리는 데이터 모델 설계, CRUD 작업 구현, 할일 관리를 위한 엔드포인트 생성으로 시작했습니다. 또한 입력 유효성 검사, 오류 처리 및 테스트에 대해서도 다루었습니다. 이러한 기반을 통해 API를 더욱 확장하거나 프런트엔드와 통합하여 완전한 애플리케이션을 만들 수 있습니다.

제 글을 응원하고 싶거나 맥주 한 잔 사주고 싶으시다면:
https://buymeacoffee.com/bmours

위 내용은 FastAPI를 사용하여 Todo API 구축하기: 단계별 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿