Python 기반의 API 생성 툴로, 프레임워크보다는 API 생성에 특화된 도구다.
Micro Service 방식으로 서버를 기능별로 분할해서 만든다.
가상환경은 폴더마다 따로 만들어야 한다. 폴더가 바뀔 때마다 아래 순서를 진행한다.
# 1. 폴더 만들고 이동
cd C:\work
mkdir board
cd board
# 2. 가상환경 생성
py -m venv .venv
# 3. 가상환경 활성화 (앞에 (.venv) 붙으면 성공)
.venv\Scripts\activate
# 4. 패키지 설치
pip install fastapi uvicorn
# 5. 서버 실행
uvicorn main:app --reload
팀원이 requirements.txt 를 넘겨주면 한 번에 환경 세팅 가능하다.
pip install -r requirements.txt
폴더에src디렉터리를 만들고 그 안에 .py파일들을 생성한다.
src폴더는 mark directory as에서 source root으로 바꿔준다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return "hello"
@app.get("/data")
def get_data():
return {"hello": 1234}
from fastapi.responses import FileResponse
@app.get("/")
def root():
return FileResponse("index.html")
서버 실행 후 아래 주소로 접속하면 API 문서를 자동으로 확인할 수 있다.
http://localhost:8000/docshttp://localhost:8000/redoc유저에게 데이터를 받을 때는 Pydantic으로 모델을 생성해야 한다.
유저가 데이터를 보낼 때 타입이 맞는지 자동으로 검사해주는 도구.
잘못된 데이터가 서버에 들어오는 걸 막아준다.
Spring의 @Valid, @NotNull 같은 Bean Validation과 같은 역할이다.
from pydantic import BaseModel
class Model(BaseModel):
name: str # 타입 지정
phone: int
@app.post("/send")
def send_data(data: Model): # /send로 보낸 데이터가 담김
print(data)
return "전송완료"
@app.get("/")
async def root():
await 오래_걸리는_코드() # 이 코드가 끝날 때까지 기다림
return FileResponse("index.html")
SQL을 직접 쓰지 않고 Python 코드로 DB를 다룰 수 있게 해주는 도구다.
Spring의 JPA / Hibernate와 똑같은 역할이다.
# SQL 직접 쓰면
SELECT * FROM posts WHERE id = 1
# SQLAlchemy 쓰면
db.query(Post).filter(Post.id == 1).first()
| 역할 | Spring | FastAPI |
|---|---|---|
| ORM | JPA / Hibernate | SQLAlchemy |
| 테이블 정의 | @Entity | class Post(Base) |
| 쿼리 | JpaRepository | db.query(Post) |
JPA 써봤으면 개념은 이미 알고 있다. 문법만 다를 뿐이다.
추후 작성 예정