반응형
FastAPI
FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python3.6+의 API를 빌드하기 위한 웹 프레임워크라고 공식 문서에서 설명하고 있다. 웹 개발, API 개발을 해당 프레임워크를 통해 python으로 간단하게 구축 가능하다.
공식 문서 https://fastapi.tiangolo.com/
특징
- 고성능: Starlette, Pydantic의 도움을 받아 NodeJS 및 Go와 대등할 정도로 매우 높은 성능을 가진다. 가장 빠른 파이썬 프레임워크 중 하나
- 빠른 코드 작성: 약 200%에서 300%까지 기능 개발 속도 증가
- 적은 버그: 사람(개발자)에 의한 에러 약 40% 감소
- 직관적: 훌륭한 편집기 지원. 모든 곳에서 자동완성 지원. 적은 디버깅 시간
- 쉬움: 쉽게 사용하고 배우도록 설계. 문서 읽는 시간 단축
- 짧음: 코드 중복 최소화. 각 매개변수 선언의 여러 기능
- 견고함: 프로덕션용 코드. 자동 대화형 문서 제공
- 표준 기반: API에 대한 개방형 표준 기반. OpenAPI(Swagger) 및 JSON 스키마
예제
# main.py
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_price": item.price, "item_id": item_id}
서버 실행하기
uvicorn main:app --reload
API 처리
- 경로 / 및 /items/{item_id}에서 HTTP 요청 받기
- 두 경로 모두 GET 연산(HTTP 메소드)을 받는다
- 경로 /items/{item_id}는 경로 매개변수 int형이어야 하는 item_id를 가지고 있다.
- 경로 /items/{item_id}는 str형이어야 하는 경로 매개변수 q를 선택적으로 가지고 있다.
- GET 및 PUT 요청에 item_id가 경로에 있는지 검증
- GET 및 PUT 요청에 item_id가 int 타입인지 검증
- GET 요청에 q라는 선택적인 쿼리 매개변수 검사(예시 - http://127.0.0.1:8000/items/foo?q=somequery)
- q 매개변수는 None으로 선언되었기 때문에 선택사항
- None이 없다면 필수사항입니다
- /items/{item_id}으로의 PUT 요청은 본문을 JSON으로 읽음
- name을 필수 속성으로 갖고 str형인지 검사
- price을 필수 속성으로 갖고 float형인지 검사
- is_offer를 선택 속성으로 갖고 bool형인지 검사
자동 대화형 API 문서
https://localhost:8000/docs → Web UI에서 RestAPI들을 테스트
https://localhost:8000/redocs → 자동으로 API와 동기화가 이뤄지는 문서를 배포 가능
unicorn
파이썬에서 웹 서버를 구현하기 위한 ASGI 서버
ASGI : Asynchronous Server Gateway Interface의 약자, 비동기 web server를 의미함, async / await 구문을 사용
비동기 방식은 DB나 API 연동 과정에서 발생하는 대기 시간을 낭비하지 않고, CPU가 다른 작업을 할 수 있도록 하는 방식
FastAPI 실행 방법
uvicorn main:app --reload
또는
# main.py
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
a = "a"
b = "b" + a
return {"hello world": b}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
반응형
'Python' 카테고리의 다른 글
[python] Flask 기초 사용법 (0) | 2023.08.22 |
---|---|
[python] pydantic 알아보기 (0) | 2023.08.21 |
[python] datetime hour 추출 후 zfill (0) | 2023.08.17 |
[python] anaconda 설정 (0) | 2023.08.16 |
[python] multiprocessing 사용법 (0) | 2023.08.14 |