3.1.2 Fast API

1. FastAPI 기본지식

1.1. Path Parameter, Query Parameter

  • Path Parameter

    • /users/402

    • 경로가 없을 경우 404

    • ex) 하위 게시물

  • Query Parameter

    • /users?id=402

    • 경로가 없을 경우 빈 값

    • ex) 로그인 id, pw전송

  • Optional Parameter

def read_item(item_id: str, q: Optional[str] = None)

1.2. Request Body

Client에서 API 요청시에 Request Body를 사용한다.

  • Content Type: 전송할 데이터의 Type을 명시해준다.

    • application/x-www-form-urlencoded : BODY에 Key, Value 사용. & 구분자 사용

    • text/plain : 단순 txt 파일

    • multipartform-data : 데이터를 바이너리 데이터로 전송

[Swagger로 테스트하기]

1.3. Response Body

서버에서 Client에게 데이터를 담아서 주는 Response Body

1.4. Form

Form을사용하기 앞서 설치가 필요하다.

pip install python-multipart
pip install Jinja2

1.5. File

파일업로드

2. Pydantic

  • FastAPI에서 Class 사용할 때 보이던 Pydantic

  • Data Validation / Settings Management 라이브러리

  • Type Hint를 런타임에서 강제해 안전하게 데이터 핸들링

  • 파이썬 기본 타입(String, Int 등) + List, Dict, Tuple에 대한 Validation 지원

  • 기존 Validation 라이브러리보다 빠름 (Benchmark)

  • Config를 효과적으로 관리하도록 도와줌

  • 머신러닝 Feature Data Validation으로도 활용 가능

2.1. Validation

예시 과정을 통해 살펴보기로 한다.

Validation Check Logic

  • 조건 1: 올바른 url을 입력 받음 (url)

  • 조건 2: 1-10 사이의 정수 입력 받음 (rate)

  • 조건 3: 올바른 폴더 이름을 입력 받음(target_dir) 사용할 수 있는 방법

  • 일반 Python Class를 활용한 Input Definition 및 Validation

  • Dataclass를(python 3.7 이상 필요) 활용한 Input Definition 및 Validation

  • Pydantic을 활용한 Input Definition 및 Validation

Python Class 사용시

  • Python Class로 Input Definition 및 Validation => 의미 없는 코드가 많아짐

  • 복잡한 검증 로직엔 Class Method가 복잡해지기 쉬움

  • Exception Handling을 어떻게 할지 등 커스텀하게 제어할 수 있는 있지만 메인 로직(Input을 받아서 Inference를 수행하는)에 집중하기 어려워짐

DataClass 사용시

  • 인스턴스 생성 시점에서 Validation을 수행하기 쉬움

  • 여전히 Validation 로직들을 직접 작성해야 함

  • Validation 로직을 따로 작성하지 않으면, 런타임에서 type checking을 지원하지 않음

Pydantic 사용 시

  • 훨씬 간결해진 코드 (6라인)(vs 52라인 Python Class, vs 50라인 dataclass)

  • 주로 쓰이는 타입들(http url, db url, enum 등)에 대한 Validation이 만들어져 있음

  • 런타임에서 Type Hint에 따라서 Validation Error 발생

  • Custom Type에 대한 Validation도 쉽게 사용 가능

2.2. Config 관리

  • 애플리케이션은 종종 설정을 상수로 코드에 저장함

  • 이것은 Twelve-Factor를 위반

  • Twelve-Factor는 설정을 코드에서 엄격하게 분리하는 것을 요구함

  • Twelve-Factor App은 설정을 환경 변수(envvars나 env라고도 불림)에 저장함

  • 환경 변수는 코드 변경 없이 쉽게 배포 때마다 쉽게 변경할 수 있음

  • The Twelve-Factor App이라는 SaaS(Software as a Service)를 만들기 위한 방법론을 정리한 규칙들에 따르면, 환경 설정은 애플리케이션 코드에서 분리되어 관리되어야 함

Pydantic base settings

Last updated