[FastAPI Docs] FastAPI

JeongChaeJin·2022년 8월 22일
0

Feature

  1. Fast
  • Starlette, Pydantic -> NodeJS & GO 와 대등한 성능
  1. Fast code*
  2. Small Bug*
  • 휴먼 에러 감소
  1. Intuitive
  2. Easy
  3. Short
  4. 견고
  5. 표준 기반
  • OpenAPI 및 Json schema

요구 사항

  • Python3.6+
  • Data Part : Pydantic
  • Web Part : Startlette

설치

pip install fastapi
pip install "uvicorn[standard]"
  • production을 위한 ASGI 서버 필요

Basic

from typing import Union

from fastapi import FastAPI

app = FastAPI()


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


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

or

from typing import Union

from fastapi import FastAPI

app = FastAPI()


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


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Union[str, None] = None):

Run

uvicorn main:app --reload
  • main : main.py (python module)
  • app : main.py로 만들어진 obj -> app = FastAPI()
  • --reload : code 변경 후 서버 재시작 (develop 환경에서만 사용)
http://127.0.0.1:8000/items/5?q=somequery

  • 쥐리는 응답을 확인할 수 있다.
  • /, /items/{item_id} 에서 HTTP 요청 받기
    • GET method 이용
  • /items/{item_id}는 경로 매개 변수 int 형 item_id를 갖고 있다.
  • /items/{item_id}는 선택적 str 형 경로 매개변수 q를 갖고 있다.
http://127.0.0.1:8000/docs

  • 스웨거 UI 무쳤다.
from typing import Union

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Union[bool, None] = None


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


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

  • PUT method도 사용 가능하다.

Summary

  • 현재 배운 내용으로는 매개변수의 타입, body 등을 함수 매개변수로서 한번에 선언했다.
    • 현대 표준 Python Type으로 진행
  • 한번에 얻게 되는 것
    • 자동완성, 타입 검사, 데이터 검증(중첩 JSON 객체, 유효성 판별), 전송 데이터 변환(JSON, 경로 매개변수, Forms, file, cookie 등)
    • 출력 데이터도 변환
    • 스웨거, ReDoc 등을 얻을 수 있다.
profile
OnePunchLotto

1개의 댓글

comment-user-thumbnail
2022년 12월 2일

벤치 결과 순수하게 fastapi만 사용해서는 nodejs나 go만큼 나오지는 않더라구요. orjson + 비동기 orm + uvloop 사용시 nodejs보다 나은 성능을 보이고, 이 조건에서 gunicorn 워커 8개를 사용하면 go보다 약간 부족한 성능을 보입니다.

답글 달기