-
FastAPI 구현해보기Today I Learned 2024. 8. 21. 02:14
FastAPI 란?
HTTP API를 쉽게 만들기 위해 사용되는 python으로 작성되는 웹 프레임워크이다.
쉽게 말하자면, 우리가 사용하던 Spotify api, 공공데이터 api 모두 백엔드 단의 서버에 데이터를 요청해서 쉽게 받을 수 있도록 알려주는 명세서 같은 것이다.
(API 정의 자체는, 어플리케이션 간의 상호작용을 할 수 있도록 방법이나 규칙을 정의한 것... 이라고 나와있지만 요근래 우리는 백-프론트의 상호작용 용도로 많이 쓰인다)FastAPI를 사용하면 우리가 여러 데이터를 가져올 때 사용하는 Restful API 형태로 쉽게 만들 수 있고,
클라이언트-서버 간의 통신을 빠르게 접해볼 수 있게 해준다.구현 과정
FastAPI python으로 작성
## main.py from typing import Union from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class User(BaseModel): id: str passwd: str name: str @app.get("/") async def read_root(): return "This is root path from MyAPI" @app.get("/users/{user_id}") async def read_user(user_id: str): return {"user_id": user_id} @app.post("/users/") async def create_user(user: User): return user @app.put("/users/{user_id}") async def update_user(user_id: str, user: User): result = {"user_id": user_id, **user.dict()} @app.delete("/users/{user_id}") def delete_user(user_id: str): print(user.dict()) return {"deleted": user_id}
위의 코드로 간단한 CRUD 의 API를 바로 작성할 수 있다.
API 실행
uvicorn main:app --reload --host 0.0.0.0
우리가 만든 API를 테스트해보기 위해서 위의 명령어를 터미널에 입력해, api를 실행시키고 웹에서 0.0.0.0:8000 을 입력하면 바로 서버에서 api를 가져올때의 응답처럼 반응하는 웹 사이트를 볼 수 있다.(0.0.0.0은 원하는 주소로 변경 가능 - 로컬 주소, 8000번 포트번호는 주로 테스트/개발 서버를 실행할때 사용하는 포트번호이다.
포트번호 & 주소 다 충돌나지 않는 선에서 변경 가능)위의 코드로는 아직 우리가 데이터베이스를 연결해주지 않았기에 그냥 빈 깡통의 API이다.
그럼 데이터를 어디서 get, post, delete 하느냐? user.dict()로 파이썬 dictionary 변수에 임의로 저장하고 있는 것이다.- 0.0.0.0:8000/users/1dfas
Q: 위의 결과로 봐서는 그럼 users/1dfas를 입력하면 바로 app.get 함수가 실행되는 것을 알 수 있다.
그럼 get, put, delete 함수의 엔드포인트가 다 users/{user_id}로 같은데 어떻게 GET 요청인줄 알고 read_users 를 실행시키는 걸까?A: chrome url에 입력시에 기본적으로 GET 요청으로 보내게 되어있다. 따라서 크롬에서 delete, put 과 같은 요청을 보내려면, 개발자 도구에서 설정을 변경해야한다.
만약 chrome이 아닌 terminal에서 실행시킨다면,curl -X GET "http://0.0.0.0:8000/users/123d" curl -X POST "http://0.0.0.0:8000/users/" -H "Content-Type: application/json" -d '{"id": "123d", "passwd": "secret", "name": "John Doe"}'
이런 식으로 어떤 명령인지 명시해야한다.
학습 메모
'Today I Learned' 카테고리의 다른 글
FastAPI로 GET, POST, DELETE 실행해보기 (0) 2024.08.22 FastAPI에 pymysql(DB) 연결하기 (0) 2024.08.21 [네이버 부스트캠프 9기 챌린지] 최종 회고 (2) 2024.08.12 [네이버 부스트캠프 챌린지] 3주차 회고 (0) 2024.08.12 [네이버 부스트캠프 챌린지] 2주차 회고 (0) 2024.07.29