brunch

You can make anything
by writing

C.S.Lewis

by 유윤식 Oct 04. 2020

Python API: FastAPI

#제발 #좋은건 #쓰자 #ASGI

깊은 내용까지는 나도 모름.


보통 Tornado, Flask, Django 등 프레임워크를 사용.

여기에 몽키패치, 유니콘 등등

패키지로 사용해서 서버의 속도, 밴드위즈 등을 상향시킬 수 있음.


근데,

사실 지금까지 Node, Go 언어가 네트워크 쪽으로 빠르다는 평가가 많았는데

실제로도 빨랐음.


사용해본 결과,

Node, Go 모두 간편하게 코드 몇줄로 웹서버를 동작 시킬 수 있었음.

물론 Flask 도 비슷한 수준으로 간편하게 웹서버를 만들 수 있음.


하지만,

딱히 좋은 성능을 낼 수 없다는 것이 문제.


FastAPI는 Node, Go 에서 볼 수 있었던 성능과

Flask 에서 볼 수 있었던 간편함과 편리성을 모두 가져 갈 수 있음.


참조 : https://fastapi.tiangolo.com


설치도 매우 간편한데,


--01. pip install fastapi

--02. pip install uvicorn



참조 사이트에서 큇스타트를 확인하면 실행까지 5분이면 끝!


참조할만한 코드는,



from typing import Optional, List, Tuple, Set, Dict

from datetime import datetime, date

from fastapi import FastAPI

from pydantic import BaseModel


app = FastAPI()



class Item(BaseModel):

    name: str

    price: int

    gen: date

    is_offer: Optional[bool] = None



@app.get('/')

async def read_root():

    my_data = {

        'name': 'Sik',

        'price': 1000,

        'gen': '2020-09-09',

        'is_offer': True,

    }

    my_item: Item = Item(**my_data)

    return my_item


@app.get('/item/{item_id}')

async def read_item(item_id: int, q: Optional[str] = None):

    return ({

        'item': item_id,

        'q': q

    })


@app.put('/item/{item_id}')

async def update_item(item_id: int, item: Item):

    return ({

        'item_name': item.name,

        'item_id': item_id

    })



localhost:8000/docs 쪽으로 접근하면,

localhost:8000/redoc 쪽으로 접근하면,


이거 쓰는게 지금은 가장 빠르고 쉽게 API를 설계할 수 있는 방법으로 생각됨.


어짜피 같은 파이썬으로 돌아가는 로직이라 호환이 아예 1도 안되는건 아니니까.

안전성도 덤으로 가져 갈 수 있음.

작가의 이전글 PySaprk:DataFrame(4)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari