FastAPI는 파이썬에서 사용할 수 있는 현재 가장 좋은 백엔드 프레임워크라고 할 수 있다.
FastAPI는 다음과 같은 장점을 가지고 있다.
1. 각 함수는 비동기로 동작한다.
2. 백엔드를 작업하면 데이터 처리에 골치를 아픈 경우가 많다. FastAPI는 데이터 오류를 쉽게 처리할 수 있는 좋은 프레임워크 이다. Pydantic을 이용한 Json 값 오류를 쉽게 조치 할 수 있다. 세부적인 내용은 https://pydantic-docs.helpmanual.io/ 를 확인하기 바란다.
3. Swagger, Redoc를 기본적으로 제공한다
4. 파이썬에서 빠른 프레임 워크에 속한다. 아래 벤치마크 결과를 확인해보면, 다른 파이썬 웹 프레임워크 보다 휼륭한 속도를 가지고 있다.
Round 19 results - TechEmpower Framework Benchmarks
FastAPI는 다음 2가지 라이브러리를 설치해서 사용할 수 있다.
Frist Run
$ 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}
'Python' 카테고리의 다른 글
Python - *args와 **kwargs 이해 (0) | 2024.03.25 |
---|---|
Python - JSON 데이터 검색 및 불러오기(dumps, loads, items) (0) | 2024.03.25 |
Python - FastAPI Relationship SQL data 처리 (0) | 2024.03.25 |
PYTHON - pip 패키지 실치 [SSL: CERTIFICATE_VERIFY_FAILED] 오류 해결 (0) | 2024.03.18 |
Python - Microsoft 365 Defender Advanced hunting Query (0) | 2024.03.18 |