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,
}
}
todos 조회
# status_code만 적어주면 =200을 안 적어도 자동으로 200으로 매핑된다.
@app.get("/todos", status_code=200)
def get_todos_handler(order: str | None = None):
ret = list(todo_data.values())
if order and order == "DESC":
return ret[::-1]
return ret

본래 200으로 상태코드가 잘 동작하지만 status_code=200을 적어줌으로써 더 명시적으로 작성할 수 있다.
todo 단일 조회
from fastapi import FastAPI, Body, HTTPException
# id를 찾아 todo를 단순 조회할 때 만약 찾는 id가 없으면 404 처리를 해줘야된다.
@app.get("/todos/{todo_id}", status_code=200)
def get_todo_handler(todo_id: int):
# todo는 todo_data에서 todo_id를 get 조회를 먼저해서 todo를 찾아준다.
# todo_id로 찾는 todo가 없다면 자동으로 none을 넣어준다.
todo = todo_data.get(todo_id)
# 만약 todo가 있다면
if todo:
# todo 반환
return todo
# 만약 todo가 없다면
raise HTTPException(status_code=404, detail="Todo Not Fount")
- 본래 id로 찾았을 때 해당 값이 없다면 404 에러를 내줘야한다.
- 404 에러를 내기 위해 HttpException을 import
- raise가 뭐지?
=> https://hyunai.tistory.com/57
에러 발생시키기
try: print("한 자리 숫자 나누기 전용 계산기") num1 = int(input("첫번째 숫자를 입력 : ")) num2 = int(input("두번째 숫자를 입력 : ")) if num1 >= 10 or num2 >= 10: raise ValueError print("{0} / {1} = {2}".format(num1, num2, int(nu
hyunai.tistory.com
존재하는 id를 입력했을 때

없는 id를 입력했을 때

404 에러가 나고 작성한 detail 값이 Response body 값으로 출력되는 걸 확인할 수 있다.
todo_data 추가하기
# import 받은 BaseModel을 상속받는다.
# todo 아이템들이 갖는 형태와 동일한 스키마로 만든다.
class CreateToDoRequest(BaseModel):
id: int
contents: str
is_done: bool
# post 성공은 201
@app.post("/todos", status_code=201)
# FastAPI가 알아서 reqeustBody를 CreateToDoRequest에 넣어서 처리를 해준다.
def create_todo_handler(request: CreateToDoRequest):
todo_data[request.id] = request.dict()
return todo_data[request.id]

todo_data 수정하기
@app.patch("/todos/{todo_id}", status_code=200)
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
raise HTTPException(status_code=404, detail="todo Not Found")
기존의 id가 3인 값의 is_done 값을 수정해주기


만약 없던 id 값을 바꿔준다면?


todo_data 삭제하기
# delete 성공 상태 코드 : 204
# 204는 응답 받는 body가 없기 때문에 return이 없거나 빈 return을 줘도 된다.
@app.delete("/todos/{todo_id}", status_code=204)
def delete_todo_handler(todo_id: int):
# .pop() 함수로 해당 todo_id를 찾아 해당하는 데이터 삭제
# 만약 키가 없는 경우에 키 에러가 날 수 있어서 default value 값으로 None을 넣어준다.
todo = todo_data.pop(todo_id, None)
# todo가 있는 경우에
if todo:
return
# todo가 없는 경우에
raise HTTPException(status_code=404, detail="todo Not Found")

'FastAPI > FastAPI 알아보기' 카테고리의 다른 글
| DELETE API - 삭제 (0) | 2026.05.10 |
|---|---|
| PATCH API - 수정 (0) | 2026.05.10 |
| POST API - 생성 (0) | 2026.05.10 |
| GET API - 단일 조회 (0) | 2026.05.10 |
| GET API - 전체 조회 (0) | 2026.05.10 |