FastAPI/FastAPI 알아보기

PATCH API - 수정

hyunai 2026. 5. 10. 13:04
from fastapi import  FastAPI, Body

todo_data = {
    1: {
        "id": 1,
        "contents": "실전 FastAPI 섹션 0 수강",
        "is_done": True,
    },
    2: {
        "id": 2,
        "contents": "실전 FastAPI 섹션 1 수강",
        "is_done": False,
    },
    3: {
        "id": 3,
        "contents": "실전 FastAPI 섹션 2 수강",
        "is_done": False,
    }
}

@app.patch("/todos/{todo_id}")
def update_todo_handler(
    todo_id : int,
    is_done: bool = Body(..., embed=True),
):
    # 기존 todo_data에서 todo_id가 될 todo를 get
    todo = todo_data.get(todo_id)
    # 만약 투두가 있다면
    if todo:
        todo["is_done"] = is_done
        return todo
    # 만약 투두가 없다면 빈 dictinary
    return {}

is_done: bool = Body(..., embed=True) 란?

is_done: bool = Body(..., embed=True)
#               ↑     ↑    ↑
#            Body  필수  감싸기

Body

  • 이 값은 Request Body에서 꺼내와라
  • Body를 안 붙이면 FastAPI가 is_done을 Query String에서 찾으려고 한다.
  • 근데 이건 Body에 있는 값이라서 명시적으로 알려줘야한다.
선언 방식 꺼내는 곳 예시
todo_id: int URL 경로 /todos/1
order: str = None Query String /todos?order=DESC
is_done: bool = Body(...) Request Body { "is_done": true }

...(Ellipsis)

  • 필수값
  • Python 내장 객체, FastAPI에서 "반드시 있어야 함"의 신호로 쓴다.
is_done: bool = Body(...)    # 필수 → 없으면 422 에러
is_done: bool = Body(None)   # 선택 → 없으면 None
is_done: bool = Body(False)  # 선택 → 없으면 False

embed = True

  • JSON 키로 감싸달라는 의미
  • Body 파라미터가 딱 하나일 때, FastAPI는 기본적으로 값을 날 것으로 받으려 한다.
  • 실무에서 JSON은 항상 키-값 쌍으로 오기 때문에 embed=True로 키를 명시하는 것
  보내야 하는 JSON
embed=False (기본값) true
embed=True { "is_done": true }

만약 Body 파라미터가 2개 이상이라면?

파라미터가 하나일 때만 embed=True가 필요

# 이러면 자동으로 키-값으로 묶여서 embed 안 써도 됨
def update_todo_handler(
    todo_id: int,
    is_done: bool = Body(...),
    memo: str = Body(...),      # 2개 이상이면 자동으로 embed처럼 동작
):
    pass

# 자동으로 이렇게 받음
{
    "is_done": true,
    "memo": "메모내용"
}

전체 흐름 정리

PATCH /todos/1          ← todo_id = 1 (URL에서)
{
  "is_done": true       ← is_done = True (Body에서)
}
        ↓
todo_data[1]["is_done"] = True
        ↓
{ "id": 1, "contents": "...", "is_done": true } 반환

swagger 에서 기존 2번 id의 is_done 값을 True 값으로 수정해주기

swagger에서 없는 id인 4를 넣는다면?

빈 {}를 반환

'FastAPI > FastAPI 알아보기' 카테고리의 다른 글

Error 처리  (0) 2026.05.15
DELETE API - 삭제  (0) 2026.05.10
POST API - 생성  (0) 2026.05.10
GET API - 단일 조회  (0) 2026.05.10
GET API - 전체 조회  (0) 2026.05.10