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
- 등등..
댓글남기기