본문 바로가기

FastAPI

FastAPI 설치 및 Pydantic 소개

 

파이썬 버전 확인

FastAPI는 모던 파이썬(3.6+)만을 지원하므로 3.6 이상의 파이썬이 반드시 설치되어 있어야 합니다.

$ python3 -V
Python 3.9.4
# 또는
$ python3 --version
Python 3.9.4

 

python 가상환경 생성

$ python3 -m venv venv
$ source venv/bin/activate

 

이름이 반드시 venv일 필요는 없습니다.

 

바로 FastAPI를 설치해봅시다.

pip install fastapi

 

sample 코드 작성 : 

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def hello():
    return "Hello, World!"

if __name__ == "__main__":
	uvicorn.run("main:app", reload = True)

 

가장 간단한 FastAPI 앱을 만들었습니다!  FastAPI는 기본적으로 REST API를 쉽게 만들수 있게 설계되었습니다. 여기서 REST API란 클라이언트와 서버 간의 통신을 위한 규칙을 제공해서 자원(URI)을 사용하여 데이터를 표현하고 상태를 전달합니다.

 

주로 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 특정 자원에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행합니다.

 

여기서 FastAPI를 호출해서 앱을 인스턴스화하고, 데코레이터를 이용해서 엔드포인트("/")를 만들게 됩니다.

  • 앱을 인스턴스화 : app = FastAPI
  • 데코레이터 : @app.get("/")
  • 엔드포인트 : "/"

실행은 다음과 같이 uvicorn을 설치해 줍니다.

pip install uvicorn

 

다음과 같은 명령어로도 실행 할 수도 있고,

 

uvicorn main:app --reload
  • main: main.py 파일을 가리킵니다.
  • app: main.py 에서 app을 가리킵니다.
  • --reload: 파일에 변화가 생기면 재시작 하겠다는 옵션입니다.

 

파이썬 스크립트에 해당 코드가 작성되어져 있다면,

if __name__ == "__main__":
	uvicorn.run("main:app", reload = True)

 

 

이과 같이 실행 할 수도  있습니다.

python main.py

 

pydantic은 파이썬 타입 어노테이션 문법에 근거하여 데이터 검증을 해주는 라이브러리입니다.

 

from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel


class User(BaseModel):
    id: int
    name = 'John Doe'
    signup_ts: Optional[datetime] = None
    friends: List[int] = []


external_data = {
    'id': '123',
    'signup_ts': '2019-06-01 12:22',
    'friends': [1, 2, '3'],
}
user = User(**external_data)
print(user.id)
#> 123
print(repr(user.signup_ts))
#> datetime.datetime(2019, 6, 1, 12, 22)
print(user.friends)
#> [1, 2, 3]
print(user.dict())
"""
{
    'id': 123,
    'signup_ts': datetime.datetime(2019, 6, 1, 12, 22),
    'friends': [1, 2, 3],
    'name': 'John Doe',
}
"""

 

단순히 타입 검사를 하는 것이 아니라 적절하게 변형(cast)을 해줍니다. 그렇기 때문에 문자열로 통신하는 http 환경에서 제 값을 톡톡히 해냅니다.

 

예) GET /users/123 을 호출한다 할 때 123이 실제로는 문자열이지만, 웹 애플리케이션에서는 정수형인지 문자열인지 알 수 없습니다. 이 때 pydantic을 사용하여 개발자가 원하는 타입으로 받을 수 있습니다

'FastAPI' 카테고리의 다른 글

FastAPI 쿼리 매개변수  (0) 2024.01.16
순서 문제  (1) 2024.01.15
경로 매개변수  (0) 2024.01.15
HTTP 파이  (0) 2024.01.15
FastAPI란 .. ?  (2) 2024.01.15