FastAPI 1

태그: , , , ,

카테고리: ,


출처 : FastAPI

🚫 아래 내용은 주관적인 생각이므로 사실과 다를 수 있습니다.

시작 전 간략 겉핥기

특징

  • 쉬움
  • 빠름
  • 코드 작성도 빠름
  • 작성할 코드도 짧음
  • 버그 적음
  • 직관적, 완성형
  • 자동으로 반응형 API 문서 생성
  • OpenAPI(Swagger), JSON 스키마 완벽 호환
  • 웹 부분 : Starlette 비동기 프레임워크 기반
  • 데이터 부분 : Pydantic의 BaseModel 기반 문서 자동화

설치

$ pip install fastapi
$ pip install uvicorn

예제

main.py

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


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

# async 추가시 비동기
# @app.get("/")
# async def read_root():
#     return {"Hello": "World"}

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

실행

$ uvicorn main:app --reload
// reload : 변경사항 자동 리로드 옵션
// 추가 옵션 가능

응답 확인

...
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}
...
http://127.0.0.1:8000/items/5?q=somequery

위 요청의 응답은 아래와 같다

{"item_id": 5, "q": "somequery"}

반응형 API 문서

아래로 진입시 Swagger UI의 반응형 API문서가 자동으로 생성됐음을 확인할 수 있다

http://127.0.0.1:8000/docs
// redoc은 ReDoc UI

Pydantic BaseModel 활용

# from typing import Optional
# from fastapi import FastAPI

from pydantic import BaseModel

# app = FastAPI()

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

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

# @app.get("/items/{item_id}")
# def read_item(item_id: int, q: Optional[str] = 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}


  • 기본적인 Python 3.6+에 따른 표준타입(선언한 class 타입 포함) 지원
    • 자동완성
    • 타입 확인 지원
  • 입력값 변환 지원
    • JSON
    • Path parameters
    • Query parameters
    • Cookies
    • Headers
    • Forms
    • Files
  • 출력값 변환 지원
    • 기본형 타입
    • datetime 객체
    • UUID 객체
    • Database models
    • 등등..

댓글남기기