FastAPI) FastAPI?

나 안해·2023년 3월 13일
0

FastAPI

목록 보기
1/4
post-thumbnail

0. 요구사항


1. 설치

1.1 fastapi 설치

pip install fastapi

1.2 ASGI 서버 설치

Uvicorn이나 Hypercorn emd
pip install "Uvicorn[standard]"


2. 예제

2.1 main.py 생성

from typing import Union

from fastapi import FastAPI

인스턴스명 = FastAPI()


@인스턴스명.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}

def 대신 async def도 사용 가능

2.2 서버 실행

uvicorn main:인스턴스명 --reload

uvicorn main:인스턴스명?

  • main: main.py 파일 (파이썬 "모듈").
  • app: the object created inside of main.py with the line app = FastAPI().
  • --reload: 코드가 변경된 후 서버 재시작하기. 개발환경에서만 사용하십시오.

2.3 확인

코드 이해하기

  • 경로 / 및 /items/{item_id}에서 HTTP 요청 받기.
  • 두 경로 모두 GET 연산(HTTP 메소드 로 알려진)을 받는다.
  • 경로 /items/{item_id}는 경로 매개변수 int형 이어야 하는 item_id를 가지고 있다.
  • 경로 /items/{item_id}는 선택적인 str형 이어야 하는 경로 매개변수 q를 가지고 있다.

3. 대화형 API / 대안 API

3.1 대화형 API

http://IP:포트번호/docs로 들어가면 Swagger를 이용한 자동 대화형 API 문서를 볼 수 있다

3.2 대안 API

http://IP:포트번호/redoc으로 들어가면 다른 자동 문서를 볼 수 있다.

3.3 예제) main.py를 수정해서 본문 받기

3.3.0 Pydantic을 이용해 파이썬 표준 타입으로 본문을 선언

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}

위에서 uvicorn 명령에 --reload을 추가 했기 때문에 서버가 자동으로 리로딩 할 수 있어야 한다.

3.3.1 대화형 API 문서 업그레이드

  • http://IP:포트번호/docs로 이동
  • Try it out 버튼을 눌러서 수정
  • Execute 버튼을 눌러서 적용

3.3.2 대안 API 문서 업그레이드

정도는 궁금하면 본진 가서 보자


4. 의존성

4.1 Pydantic:

ujson - JSON "파싱".
email_validator - 이메일 유효성 검사

4.2 Starlette:

HTTPX - TestClient를 사용할 때 필요
jinja2 - 기본 템플릿 설정을 사용할 때 필요
python-multipart - request.form()과 함께 "parsing"의 지원에 필요
itsdangerous - SessionMiddleware 지원에 필요
pyyaml - Starlette의 SchemaGenerator 지원에 필요 (FastAPI와 쓸때는 필요 없을 것이다)
graphene - GraphQLApp 지원에 필요
ujson - UJSONResponse를 사용하려면 필요

4.3 FastAPI / Starlette:

uvicorn - 애플리케이션을 로드하고 제공하는 서버
orjson - ORJSONResponse을 사용하려면 필요

pip install fastapi[all]로 모두 설치 할 수 있다.


참고

  • FastAPI
  • 대안 문서도 새 쿼리 매개변수와 본문을 반영한다

0개의 댓글