3.1.2 Fast API
Last updated
Last updated
Path Parameter
/users/402
경로가 없을 경우 404
ex) 하위 게시물
Query Parameter
/users?id=402
경로가 없을 경우 빈 값
ex) 로그인 id, pw전송
Optional Parameter
Client에서 API 요청시에 Request Body를 사용한다.
Content Type: 전송할 데이터의 Type을 명시해준다.
application/x-www-form-urlencoded : BODY에 Key, Value 사용. & 구분자 사용
text/plain : 단순 txt 파일
multipartform-data : 데이터를 바이너리 데이터로 전송
[Swagger로 테스트하기]
서버에서 Client에게 데이터를 담아서 주는 Response Body
Form을사용하기 앞서 설치가 필요하다.
파일업로드
FastAPI에서 Class 사용할 때 보이던 Pydantic
Data Validation / Settings Management 라이브러리
Type Hint를 런타임에서 강제해 안전하게 데이터 핸들링
파이썬 기본 타입(String, Int 등) + List, Dict, Tuple에 대한 Validation 지원
기존 Validation 라이브러리보다 빠름 (Benchmark)
Config를 효과적으로 관리하도록 도와줌
머신러닝 Feature Data 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로 Input Definition 및 Validation => 의미 없는 코드가 많아짐
복잡한 검증 로직엔 Class Method가 복잡해지기 쉬움
Exception Handling을 어떻게 할지 등 커스텀하게 제어할 수 있는 있지만 메인 로직(Input을 받아서 Inference를 수행하는)에 집중하기 어려워짐
인스턴스 생성 시점에서 Validation을 수행하기 쉬움
여전히 Validation 로직들을 직접 작성해야 함
Validation 로직을 따로 작성하지 않으면, 런타임에서 type checking을 지원하지 않음
훨씬 간결해진 코드 (6라인)(vs 52라인 Python Class, vs 50라인 dataclass)
주로 쓰이는 타입들(http url, db url, enum 등)에 대한 Validation이 만들어져 있음
런타임에서 Type Hint에 따라서 Validation Error 발생
Custom Type에 대한 Validation도 쉽게 사용 가능
애플리케이션은 종종 설정을 상수로 코드에 저장함
이것은 Twelve-Factor를 위반
Twelve-Factor는 설정을 코드에서 엄격하게 분리하는 것을 요구함
Twelve-Factor App은 설정을 환경 변수(envvars나 env라고도 불림)에 저장함
환경 변수는 코드 변경 없이 쉽게 배포 때마다 쉽게 변경할 수 있음
The Twelve-Factor App이라는 SaaS(Software as a Service)를 만들기 위한 방법론을 정리한 규칙들에 따르면, 환경 설정은 애플리케이션 코드에서 분리되어 관리되어야 함