본문 바로가기
Python

Python - FastAPI with CRUD application by pydantic

by 올엠 2024. 3. 25.
반응형

FastAPI는 파이썬에서 사용할 수 있는 현재 가장 좋은 백엔드 프레임워크라고 할 수 있다.

FastAPI는 다음과 같은 장점을 가지고 있다.

1. 각 함수는 비동기로 동작한다. 

2. 백엔드를 작업하면 데이터 처리에 골치를 아픈 경우가 많다. FastAPI는 데이터 오류를 쉽게 처리할 수 있는 좋은 프레임워크 이다. Pydantic을 이용한 Json 값 오류를 쉽게 조치 할 수 있다. 세부적인 내용은 https://pydantic-docs.helpmanual.io/  를 확인하기 바란다.

3. Swagger, Redoc를 기본적으로 제공한다

4. 파이썬에서 빠른 프레임 워크에 속한다. 아래 벤치마크 결과를 확인해보면, 다른 파이썬 웹 프레임워크 보다 휼륭한 속도를 가지고 있다.

Round 19 results - TechEmpower Framework Benchmarks

 

TechEmpower Framework Benchmarks

 

www.techempower.com

 

django/flask 대비 10배 가량 빠른 속도를 자랑한다

FastAPI는 다음 2가지 라이브러리를 설치해서 사용할 수 있다.

Frist Run

FastAPI는 다음 2가지 라이브러리를 설치해서 사용할 수 있다.
$ pip install fastapi uvicorn
WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /Library/Python/3.8/site-packages
sysconfig: /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/site-packages
WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /Library/Python/3.8/site-packages
sysconfig: /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/site-packages
WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /Library/Python/3.8/include/UNKNOWN
sysconfig: /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/include/python3.8
...<중략>

이후 main.py를 만들고 

$ touch main.py

 아래 내용을 추가하자.

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "HoemPage"}

 

이제 python3 -m uvicorn main:app --reload 명령을 이용해 웹서버를 구동하면 초기 테스트 구동 준비가 끝이 났다. 

$ python3 -m uvicorn main:app --reload
INFO:     Started server process [18503]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

http://127.0.0.1:8000/docs 에 방문하면 Swagger가 실행되며, 아래와 같이 현재 만들어둔 메인 / 경로에 대한 API를 확인 할 수 있다.

 

이외에도 http://127.0.0.1:8000/redoc에 방문하면, ReDoc를 통해 API 정보를 확인할 수 있다.

CURD App with pydantic

앞서 만든 main.py에 아래 내용을 추가해 간단히 pydantic을 이용한 CURD 기능을 만들어 보자. 

from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional

app = FastAPI()
number = 0

test_db = []

class Test(BaseModel):
    id: int
    title: Optional[str] = None



@app.get("/")
def read_root():
    return {"Hello": "HoemPage"}


@app.get("/test")
def get_test():
    return test_db


@app.post("/test")
def post_test(test: Test):
    '''
    TEST
    '''
    global number
    number += 1
    db_test = Test(id = number, title = test.title)
    test_db.append(db_test.dict())
    return test_db[-1]


@app.post("/test/{id}")
def update_test(id: int, test: Test):
    test_db[id] = test
    msg = str(id) + " updated succesfully"
    return {"message": msg}


@app.delete("/test/{id}")
def delete_test(id: int):
    test_db.pop(id-1)
    msg = str(id) + " deleted succesfully"
    return {"message": msg}
반응형