[FastAPI] 2. API Router

JeongInHuh·2023년 11월 24일

FastAPI

목록 보기
2/3

📻 2. API Router

터미널에서 uvicorn 으로 서버를 실행해주고

uvicorn api:app --port 8000 --reload

GET 으로 서버 실행 확인

이제 새로운 터미널창을 열어서, curl로 GET요청을 전송해 애플리케이션이 제대로 실행되는지 테스트해보자

GET 요청을 해주고(curl은 디폴트가 GET 요청 수행)

curl http://127.0.0.1:8000/

todo 라우트가 제대로 실행되는지 확인해보자.

curl -X GET http://127.0.0.1:8000/todo -H "accept:application/json"

POST 로 todo_list에 todo 추가

# (주의) 터미널에 입력할 땐 한 줄로 입력해줘야한다

curl -X POST http://127.0.0.1:8000/todo 
-H "accept: application/json" 
-H "Content-Type: application/json"  
-d "{\"id\": 1, \"item\": \"First Todo is to finish this book!\"}"

(한줄 Version)

curl -X POST http://127.0.0.1:8000/todo -H "accept: application/json" -H "Content-Type: application/json" -d "{\"id\": 1, \"item\": \"First Todo is to finish this book!\"}"

POST 한 후 새로고침 해보면 todo 내용이 추가되어있다

uvicorn api:app --port 8000 --reload 명령어를 실행하니,
ModuleNotFoundError: No module named 'model'에러가 나왔다.
에러 해결 방법은 링크 참고


2.3 pydantic 모델을 사용한 요청 바디 검증

타입 어노테이션을 (todo: Todo)로 명시함으로써 요청 데이터 타입을 Todo로 제한할 수 있다.


model.py 파일을 만든 후, Pydantic을 사용하여 데이터 모델을 정의한다.
이 모델은 int형 idstr인 item. 두 개의 필드만 허용한다.

# model.py

from pydantic import BaseModel

# 두 개의 필드만 허용하는 pydantic 모델 생성
class Todo(BaseModel):
    id : int
    item : str

모델과 일치하는 데이터를 보내면

curl -X POST http://127.0.0.1:8000/todo -H "accept: application/json" -H "Content-Type: application/json" -d "{\"id\":2, \"item\":\"Validation models helps with input types\"}"

다음과 같이 정상적인 응답을 출력하게 된다.

업로드중..

profile
컴퓨터공학부 대학생. 4학년. velog 꾸미기 : https://velog.io/@ybkim3603/Velog벨로그-사용법-튜토리얼 Git컨벤션: https://velog.io/@shin6403/Git-git-커밋-컨벤션-설정하기 커리어 방향 설정 모음글:https://velog.io/@eon7500/커리어-방향성-설정에-도움되는-글

0개의 댓글