앞 단계 참조 링크:
- 프로젝트 소개 및 환경 구축: 2024.04.05 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습1 GET API 전체조회
- 전체 ToDo 조회: 2024.04.05 - [Web 개발/FAST API (인프런 강의 내용)] - 1 실습1 GET API 전체조회
현재 파일 내용:
# todos > src > main.py 파일 내용
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def health_check_handler():
return {"ping": "pong"}
todo_data = {
1: {
"id": 1,
"content": "실전! FastAPI 섹션 0 수강",
"is_done": True,
},
2: {
"id": 2,
"content": "실전! FastAPI 섹션 1 수강",
"is_done": False,
},
3: {
"id": 3,
"content": "실전! FastAPI 섹션 2 수강",
"is_done": False,
},
}
@app.get("/todos")
def get_todos_handler(order: str | None = None):
rt = list(todo_data.values())
if order and order == "DESC":
return rt[::-1]
return rt
02 단일 ToDo 조회하기 (GET Method 사용)
- 목표: GET Method를 이용해 기존에 있는 단일 ToDo 내용 조회하기
1. main.py에 쓰기
# todos > src > main.py
...
@app.get("/todos/{todo_id}") # @app.get("/path/subpath")
def get_todo_handler(todo_id: int): # def 핸들러명(받을값: 데이터형태):
return todo_data.get(todo_id, {}) # return 데이터.get(키값, 없을경우반환값)
1) 해당 path에 GET 요청을 보내는 API 생성
- @app.get("/todos/{todo_id}")
- app에 GET Method를 매핑
- todos path의 서브 path로 {todo_id} 지정
- 중괄호({ }) 안에 적을 시 path로 이용 가능
- def get_todo_handler(todo_id: int):
- get_todo_handler라는 함수(핸들러) 생성
- todo_id path를 int 형태의 인자로 전달받아 사용하도록 설정
- return todo_data.get(todo_id, {})
- get 이용하여 todo_id로 todo_data의 key 값들을 조회하여 해당 value를 반환
- 없을 경우 빈 딕셔너리{ }를 반환하도록 기본값 설정
- 작동 방식:
- @ 뒤에 있는 app (앞서 app=FastAPI() 선언하여 가능)이라는 FastAPI 서버에 "/todos/{todo_id}" path로 개인 요청을 보내게 되면 아래에 있는 get_todo_handler() 함수가 실행되어서 해당 API 요청을 처리할 것
- get_todo_handler () API는 int 형태의 todo_id key 값을 받았을 때 해당 value 값을 반환해주는 기능을 지님
2. FastAPI 웹 서버 재시작하기 (--reload 옵션 사용)
- 웹 서버 실행 후 코드 변경 시 변경사항을 SwaggerUI에 반영하기 위해선 웹 서버 재시작 (uvicorn 종료 후 다시 실행) 필수
- 종료 방법: Ctrl + C
- 다시 실행: uvicorn main:app --reload
$ cd /c/Users/관리자/Desktop/projects/todos/src
$ uvicorn main:app --reload
INFO: Will watch for changes in these directories: ['C:\\Users\\관리자\\Desktop\\projects\\todos\\src']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [10592] using StatReload
INFO: Started server process [8756]
INFO: Waiting for application startup.
INFO: Application startup complete.
- reload 옵션
- 코드 변화가 감지되면 자동으로 서버를 FastAPI가 재시작 됨
- 코드 수정 시 서버를 내렸다 올렸다를 하지 않고 --reload 옵션을 이용하여 개발 진행 가능
3. SwaggerUI 및 화면 확인
1) API 확인
- 브라우저에 http://127.0.0.1:8000/todos/1 입력 시 → 허용된 값, 존재하는 키 값
- 브라우저에 http://127.0.0.1:8000/todos/4 입력 시 → 허용된 값, 존재하지 않는 키 값
- 브라우저에 http://127.0.0.1:8000/todos/s 입력 시 → 허용되지 않는 값 (int가 아님), 존재하지 않는 키 값
- 허용된 값 (int) 안 줬다고 에러 메세지 나옴
2) Swagger 문서 확인
- 브라우저에 http://127.0.0.1:8000/docs 입력 시
- 이 중,
- query parameter로 todo_id가 있는 todos/{todo_id}를 통해 단일 todo 조회하는 API 만들어진 것 확인
- Try it out 버튼 클릭 수 todo_id 값에 원하는 값들을 넣어서 Execute 클릭 시 출력값 확인 가능
이때까지의 코드들:
# .../todos/src/main.py 내용
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def health_check_handler():
return {"ping": "pong"}
todo_data = {
1: {
"id": 1,
"content": "실전! FastAPI 섹션 0 수강",
"is_done": True,
},
2: {
"id": 2,
"content": "실전! FastAPI 섹션 1 수강",
"is_done": False,
},
3: {
"id": 3,
"content": "실전! FastAPI 섹션 2 수강",
"is_done": False,
},
}
@app.get("/todos")
def get_todos_handler(order: str | None = None):
rt = list(todo_data.values())
if order and order == "DESC":
return rt[::-1]
return rt
@app.get("/todos/{todo_id}")
def get_todo_handler(todo_id: int):
return todo_data.get(todo_id, {})
'Web 개발 > FAST API (인프런 강의 내용)' 카테고리의 다른 글
1 실습4 PATCH API todo 수정 (0) | 2024.04.16 |
---|---|
1 실습3 POST API todo 생성 (0) | 2024.04.15 |
1 실습1 GET API 전체조회 (0) | 2024.04.05 |
1 FastAPI 알아보기 (0) | 2024.03.26 |
0 오리엔테이션 (0) | 2024.03.26 |