Fast api는
1. 일단 파이썬이라서 문법 너무 간단
2. 매우 빠르다고 합니다. 알아본 걸로는 node 보다 빠르고 go 와 비슷하다고 합니다. 싱글스레드일텐데 어캐했누..
3. 타입 힌팅을 이용해서 자동으로 Api 문서를 생성한다.
4. 라우트 데코레이터를 이용하여 쉽게 Api를 구현할 수 있다.
ㄴ app.get("/item")
5. 다양한 데이터베이스와 연동할 수 있다. ( SQLite, SQL Server, Mysql 다 된다 )
6. 개발도구로는 인텔리제이의 파이참 추천 ( 대학교 이메일 있으면 무료로 쓸 수 있어요! )
* main.py ( python 3.9 이상 사용 )
- 프로젝트 구조를 다음과 같이 하면 좋음
Project
ㄴ main.py
ㄴ model.py
ㄴ database.py
from fastapi import FastAPI
from pydantic import BaseModel
from sqlalchemy import create_engine, Column, Integer, String, text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# FastAPI 어플리케이션 인스턴스 생성
app = FastAPI()
# 데이터베이스 정보
DB_ID = "root"
DB_PASSWORD = "비밀입니당"
DB_IP = "localhost"
DB_PORT = "3306"
DB_NAME = "ForBlazor"
# 데이터베이스 연결 문자열
conn_str = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(
DB_ID, DB_PASSWORD, DB_IP, DB_PORT, DB_NAME
)
# 데이터베이스 엔진 생성
engine = create_engine(conn_str)
# 세션 메이커 설정
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# SQLAlchemy 베이스 클래스 생성
Base = declarative_base()
# SQLAlchemy 모델 정의 : 실제 테이블 구조와 같아야 함
class Test(Base):
__tablename__ = "Test01" # 테이블 이름 설정
Id = Column(Integer, primary_key=True, index=True)
Name = Column(String(255))
# Pydantic 모델 정의
class Item(BaseModel):
Name: str # 같을 필요는 없고, DTO라고 생각하면 됨
# 루트 엔드포인트 정의
@app.get("/")
async def root():
# 데이터베이스 세션 열기
db = SessionLocal()
try:
# SQL 쿼리 실행 및 결과 가져오기
result = db.execute(text("SELECT Id, Name FROM Test01")).fetchall()
# 결과를 Item 객체 리스트로 변환
items = [Item(Id=row.Id, Name=row.Name) for row in result]
finally:
# 세션 닫기
db.close()
return items
# 새로운 사람을 추가하는 엔드포인트 정의
@app.post("/addPerson")
async def add_person(item: Item):
# 데이터베이스 세션 열기
db = SessionLocal()
try:
# 새로운 Test 객체 생성
new_item = Test( Name=item.Name)
# 세션에 추가
db.add(new_item)
# 커밋하여 데이터베이스에 반영
db.commit()
except Exception as e:
# 오류 발생 시 롤백
db.rollback()
# 오류 메시지 반환
return {"error": str(e)}
finally:
# 세션 닫기
db.close()
return {"message": "Person added successfully"} # 성공 메시지 반환
실행
- fastapi dev main.py
간단하게 로컬 DB에 있는거 가져오는 코드를 작성해봤는데,
편하긴하다. 근데 여러모로 node.js + express 조합이 낫다고 생각이 들었던게..
1. 파이썬 때문에 근본적으로 문법이 간결해서 좋긴한데, 어쨋든 프레임워크의 사용법에 대해서 유즈케이스가 있어야지 그거 보고 좀 편하게 작성할텐데 커뮤니티가 아직 형성이 안되서, 자료가 많지 않다.. ( 물론 갓 지피티로 극복 가능하지만, 이것도 한계가 있을 듯 )
2. Express 같은 경우에는 그냥 쿼리 날리고 그거 갖다가 JSON 대충 구성해서 뿌려버리면 되는데, 이것 같은 경우에는 DTO와 테이블 모델을 구성해줘야 하기 때문에 조금 더 복잡할 수 있다. 근데 어떻게 보면 쿼리를 보는 것보다 테이블 모델을 보고 이해하는게 더 편할 수 있다. 이건 호불호라고 볼 수 있겠다.
# 결론
- 편한건 node + Express 가 더 편하다.
- 파이썬 쓰고 싶으면 써도 나쁘지 않다.
- 문서화 일일히 하기 싫으면 쓰는 것 추천