시작에 앞서
해당 내용은 <가장 빠른 풀스택을 위한 Flask & FastAPI>, Dave Lee 지음. BJ Public 출판.
내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.
이전 내용
[파이썬] FastAPI - 라우팅
시작에 앞서해당 내용은 , Dave Lee 지음. BJ Public 출판.내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.라우팅 라우팅은클라이언트로부터 오는 HTTP 요청을
puppy-foot-it.tistory.com
타입 힌트(Type hint)
타입 힌트는 프로그래밍에서 변수나 함수의 에상 타입을 명시적으로 표시하는 기술이다.
FastAPI는 파이썬의 타입 힌트를 사용하여 요청을 검증하고, 적절한 데이터가 요청과 응답에 사용되도록 돕는다. 이 기능을 통해 개발자는 별도의 검증 로직을 작성하지 않고도 안정적인 API를 구축할 수 있다.
기본 타입 힌트
FastAPI에서 경로 매개변수나 쿼리 매개변수에 타입 힌트를 추가하면, 해당 타입에 맞지 않는 요청은 자동으로 거부된다. 또한, 매개변수에 기본값을 설정하여 선택적으로 만들 수 있다.
★ 경로 매개변수나 쿼리 매개변수 관련 글은 이전 포스팅 참고
from fastapi import FastAPI #FastAPI 라이브러리 import
app = FastAPI() # FastAPI 인스턴스 생성
# 경로 매개변수 사용 예제
@app.get("/items/{item_id}")
def read_items(item_id: int): #q는 기본값이 None인 쿼리 매개변수
return {"item_id": item_id}
# 쿼리 매개변수 사용 예제
@app.get("/getdata/")
def read_items(data: str = "funcoding") # data의 기본값은 'funcoding'
return {"data": data}
# 실행: uviconr main:app --reload
▶ 테스트 방법 및 결과
- http://127.0.0.1:8000/items/123으로 접속하면 {"item_id":123} 출력
- http://127.0.0.1:8000/items/fun 같이 item_id에 해당하는 데이터를 정수(int) 타입이 아닌 다른 데이터 타입으로 넣으면 에러 발생
- http://127.0.0.1:8000/getdata/?data=somquery 와 같이 data 쿼리 매개변수를 넣으면 {"data":"somequery"} 출력
- http://127.0.0.1:8000/getdata/ 와 같이 dtaa 쿼리 매개변수를 넣지 않으면 기본값으로 { "data":"funcoding"} 출력
- http://127.0.0.1:8000/getdata/?data=1.1 과 같이 data 쿼리 매개변수를 넣으면 {"data":1.1} 출력 *1.1이 문자열(str)이 될 수도 있기 때문에 문자열로 인지하여 정상 처리
고급 타입 힌트
FastAPI는 typing 모듈에서 제공하는 List, Dict 같은 고급 타입 힌트를 사용하여 요청 데이터를 쉽게 다룰 수 있다.
from fastapi import FastAPI, Query #FastAPI 라이브러리 import
from typing import List, Dict
app = FastAPI()
# List 데이터 타입을 쿼리 매개변수로 받는 라우트 예제
@app.get("/items/")
def read_items(q: List[int] = Query([])): # 빈 리스트를 기본값으로 설정
return {"q": q}
# Dict 데이터 타입을 요청 바디로 받는 라우트 예제
@app.post("/create-item/")
def create_item(item: Dict[str, int]):
return item
# 실행: uvicorn main:app --reload
Query는 쿼리 매개변수의 기본값을 설정하는 데 사용되며, 유효성 검사 및 메타데이터 선언에도 사용된다.
Query([]) 는 해당 쿼리 매개변수가 필수가 아님을 나타내고, 기본값으로 빈 리스트를 제공한다. Dict와 달리 List 타입 힌트의 경우에는 List[int] = Query([])와 같이 반드시 Query() 관련 구문을 함께 넣어주어야 타입 힌트 유효성 검사가 항상 동작한다.
[테스트]
- List 타입의 데이터를 쿼리 매개변수로 사용하려면, 각 항목에 대해 쿼리 매개변수를 반복해서 명시해야 한다.
- curl을 사용하여 q 쿼리 매개변수와 함께 여러 값을 리스트로 전송
curl "http://127.0.0.1:8000/items/?q=1&q=2&q=3"
쿼리 매개변수로 전달한 리스트 [1,2,3]이 {"q":[1,2,3]} 형태로 JSON 응답을 받을 수 있다.
- http://127.0.0.1:8000/create-item/ 주소에 HTTP POST 요청을 전송할 때는 curl 명령어를 사용해야 한다.
curl -X POST "http://127.0.0.1:8000/create-item/" -H "accept:application/json" -H "Content-Type: application/json" -d "{\"name\": 1}"
위 명령을 실행하면 서버는 {"name":1} 형태의 요청 바디를 받고, 그대로 응답으로 반환한다.
타입 힌트로 사용 가능한 데이터 타입
- 기본 데이터 타입
- int: 정수
- float: 부동소수점 숫자
- str: 문자열
- bool: 불리언(True or False)
- 컬렉션 타입
- List: 변경 가능한 순서가 있는 컬렉션
- Tuple: 변경 불가능한 순서가 있는 컬렉션
- Dict: 키-값 쌍을 갖는 컬렉션
- Set: 중복 없는 항목의 컬렉션
- 특수 타입
- None: 아무런 값을 갖지 않음
- Any: 모든 타입을 허용, 타입 검사를 무시하고자 할 때 사용
- typing 모듈의 고급 타입
- Optional: 값이 있거나 None 일 수 있는 타입
- Union: 여러 타입 중 하나일 수 있는 값
- Callable: 호출 가능한 객체(함수 등)를 나타냄
- Iterable: 반복 가능한 객체를 나타냄
- Sequence: 시퀀스 타입을 나타냄
- 사용자 정의 타입
- 클래스나 다른 타입 힌트를 사용하여 사용자 정의 타입을 생성할 수 있음
다음 내용
[파이썬] FastAPI - HTTP 메서드, Pydantic
시작에 앞서해당 내용은 , Dave Lee 지음. BJ Public 출판.내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.이전 내용 [파이썬] FastAPI - 타입 힌트시작에 앞서해
puppy-foot-it.tistory.com
'[파이썬 Projects] > <파이썬 웹개발>' 카테고리의 다른 글
[파이썬] Pydantic: 데이터 검증 라이브러리 (0) | 2024.08.17 |
---|---|
[파이썬] FastAPI - HTTP 메서드, Pydantic (0) | 2024.08.17 |
[파이썬] FastAPI - 라우팅 (0) | 2024.08.17 |
[파이썬] FastAPI 기초 (0) | 2024.08.15 |
[파이썬] Fast API란? (0) | 2024.08.15 |