
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def health_check_handler():
return {"ping":"pong"}
todo_data = {
1: {
"id": 1,
"contents": "한대규의 오늘 할 일1",
"is_done": True
},
2: {
"id": 2,
"contents": "한대규의 오늘 할 일2",
"is_done": False
},
3: {
"id": 3,
"contents": "한대규의 오늘 할 일3",
"is_done": False
}
}
✔️ GET 요청
전체 조회
# 할 일 전체 조회
@app.get("/todos")
def get_todos_handler(order: str | None = None):
ret = list(todo_data.values())
if order == "DESC":
return ret[::-1]
return ret
FastAPI 에서는 Query Parameter 를 함수의 인자로 전달한다.
order 를 str 타입으로 받을 수 있고, | None = None 을 통해서 Query Parameter 를 전달받지 못하면 그대로 todo_data 를 반환한다.
단일 조회
# 할 일 단일 조회
@app.get("/todos/{todo_id}")
def get_todo_handler(todo_id: int):
return todo_data.get(todo_id, {})
todo_id 를 int 타입으로 받고 todo_data 에서 get 메서드를 통해 todo_id 와 key 값이 같은 데이터를 가져오고, 만약 없다면 빈 {} 를 반환한다.
✔️ POST요청
from pydantic import BaseModel
class CreateTodoRequest(BaseModel):
id: int
content: str
is_done: bool
# 할 일 생성
@app.post("/todos")
def create_todo_handler(request: CreateTodoRequest):
todo_data[request.id] = request.dict()
return
POST 요청 시에 RestBody 를 받아와야하는데, pydantic 라이브러리의 BaseModel 클래스를 활용한다.
CreateTodoRequest 함수를 만들어준다. (dto 역할을 함)
그리고 create_todo_handler 에서 request 를 CreateTodoRequest 함수로 지정을 해주고 key 는 request 의 id 값을, value 는 request 를 넣어준다.
✔️ PATCH요청
# 할 일 수정
@app.patch("/todos/{todo_id}")
def update_todo_handler(
todo_id: int,
is_done: bool = Body(..., embed=True),
):
todo = todo_data.get(todo_id)
if todo:
todo["is_done"] = is_done
return todo
return {}
Patch 메서드에서는 todo_id 를 Parameter 로 받고 RequestBody 에서 is_done 을 받아서 수정하도록 설정했다.
받아온 todo_id 로 todo_data 에서 get 메서드를 활용해 매치시켜 todo 변수에 저장했고
만약 todo 가 있다면 todo 의 is_done 값을 새로 받은 is_done 으로 업데이트 시키고 todo 를 반환시킨다.
todo 가 없다면 빈 dictionary {} 를 반환시키도록 설정했다.
✔️ DELETE요청
# 할 일 삭제
@app.delete("/todos/{todo_id}")
def delete_todo_handler(todo_id: int):
todo_data.pop(todo_id, None)
return todo_data
'컴퓨터 프로그래밍 > FastAPI' 카테고리의 다른 글
[FastAPI] Redis 를 활용해 otp 기능 구현 (0) | 2025.03.17 |
---|---|
[Alembic] Alembic (0) | 2025.03.15 |
[FastAPI] Repository 패턴 및 orm 적용 (0) | 2025.03.15 |
[FastAPI] DB 연결 및 orm 설정 (0) | 2025.03.14 |
[FastAPI] Status_code Error 처리 (0) | 2025.03.14 |