코딩/파이썬

[새싹 성동 2기] FastAPI로 구현하는 "할 일 관리 API" 기능 개발 및 테스트

insu90 2024. 12. 16. 17:27

 

 

1. 기능 개요

FastAPI를 이용해 기본적인 "할 일 관리" API를 구현합니다. 이 API는 다음의 주요 기능을 포함합니다.

구분(기능)방식URI본문응답과 관련 내용

할 일 추가 POST /todo { "id": num, "item": str } "할 일을 추가합니다."
할 일 목록 조회 GET /todo 없음 할 일 목록 반환
할 일 상세 조회 GET /todo/{todo_id} 없음 지정 ID의 할 일 반환
할 일 검색 GET /todo/search?item= 없음 검색 조건에 맞는 할 일 반환
할 일 수정 PUT /todo/{todo_id} { "item": str } "할 일을 수정했습니다."
할 일 삭제 DELETE /todo/{todo_id} 없음 "할 일을 삭제했습니다."

 

2. 기능 구현

2.1 기본 모델 정의 (model.py)

from pydantic import BaseModel

class Todo(BaseModel):
    id: int
    item: str

class TodoItem(BaseModel):  # 수정 시 사용하는 모델
    item: str

 

2.2 API 라우터 구현 (todo.py)

from fastapi import APIRouter, Path, Query
from model import Todo, TodoItem

todo_router = APIRouter()
todo_list = []  # 메모리 내 데이터 저장

# 1. 할 일 추가
@todo_router.post("/todo")
def add_todo(todo: Todo) -> dict:
    todo_list.append(todo)
    return {"message": "할 일을 추가합니다."}

# 2. 할 일 목록 조회
@todo_router.get("/todo")
def retrives_todo() -> dict:
    return {"todos": todo_list}

# 3. 할 일 검색
@todo_router.get("/todo/search")
def search_todos(item: str = Query(..., min_length=2, max_length=10)) -> dict:
    result = [todo for todo in todo_list if item in todo.item]
    return {"todos": result}

# 4. 할 일 상세 조회
@todo_router.get("/todo/{todo_id}")
def retrive_todo(todo_id: int = Path(..., title="조회할 할 일의 ID", ge=1)) -> dict:
    for todo in todo_list:
        if todo.id == todo_id:
            return {"todo": todo}
    return {"message": "일치하는 할 일이 없습니다."}

# 5. 할 일 수정
@todo_router.put("/todo/{todo_id}")
def update_todo(
    todo: TodoItem, todo_id: int = Path(..., title="수정할 할 일의 ID", ge=1)
) -> dict:
    for td in todo_list:
        if td.id == todo_id:
            td.item = todo.item
            return {"message": "할 일을 수정했습니다."}
    return {"message": "일치하는 할 일이 없습니다."}

# 6. 할 일 삭제
@todo_router.delete("/todo/{todo_id}")
def delete_todo(todo_id: int = Path(..., title="삭제할 할 일의 ID", ge=1)) -> dict:
    for td in todo_list:
        if td.id == todo_id:
            todo_list.remove(td)
            return {"message": "할 일을 삭제했습니다."}
    return {"message": "일치하는 할 일이 없습니다."}
 
 

3. 테스트

API를 테스트하기 위해 curl 명령어를 사용합니다.

3.1 할 일 추가
curl http://localhost:8000/todo -X POST -d '{ "id": 1, "item": "First Todo" }' -H "Content-Type: application/json"
# {"message":"할 일을 추가합니다."}
 
3.2 할 일 목록 조회
curl http://localhost:8000/todo
# {"todos":[{"id":1,"item":"First Todo"}]}
 
3.3 할 일 검색
curl http://localhost:8000/todo/search?item=First
# {"todos":[{"id":1,"item":"First Todo"}]}
 
3.4 할 일 수정
curl http://localhost:8000/todo/1 -X PUT -d '{ "item": "Updated Todo" }' -H "Content-Type: application/json"
# {"message":"할 일을 수정했습니다."}
 
3.5 할 일 삭제
curl http://localhost:8000/todo/1 -X DELETE
# {"message":"할 일을 삭제했습니다."}
 
3.6 수정된 목록 확인
 
curl http://localhost:8000/todo
# {"todos":[]}​
 
 

 

FastAPI를 사용하면 간단한 기능도 빠르고 효율적으로 개발할 수 있습니다. 이번 할 일 관리 API를 기반으로 다양한 기능(예: 사용자 인증, 데이터베이스 연결 등)을 확장하여 프로젝트를 발전시킬 수 있습니다.

 
 

*생성형 AI 활용한 클라우드&보안 전문가 양성캠프 과정의 교육내용 정리 자료입니다.