Fast API 공부해보기 #2 경로 동작 생성
Fast API 공부해보기 #1 특징 및 설치 백엔드로 Django, flask만 사용하다가 가볍게 사용하기에 Fast API도 좋다고 하여 한번 공부해보려고 한다. 주요 특징은 다음과 같다고 한다. 우선은 라이브러리를
beomcoder.tistory.com
REST API형식으로 한번 사용해보려고 한다. 먼저 pydantic을 알아야 한다.
pydantic은 타입 애너테이션을 사용해서 데이터를 검증하고 설정들을 관리하는 라이브러리이다.
pydantic은 런타임 환경에서 타입을 강제하고 타입이 유효하지 않을 때 에러를 발생시켜준다.
FastAPI, Project Jupyter, Microsoft, AWS 등 많은 곳에서 사용된다.
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: Union[str, None] = None
price: float
tax: Union[float, None] = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return item
그리고 포스트맨으로 한번 테스트해보려고 한다. 포스트맨은 다른분의 블로그에 잘 써져 있다.
포스트맨에 대해서도 글을 쓰기엔 귀찮다.
포스트맨(postman) 사용법(설치, 다운로드)
전부터 웹 개발을 하면서 아주 유용하게 사용했던 프로그램(서비스)가 있어 소개해보려고 합니다. 바로 포스트맨(postman)입니다. 쉽게 말하자면 http(https 포함) 요청을 날리고 응답을 보여주는 서
nhj12311.tistory.com
형식을 맞춰서 잘 써주면 잘 된다.
pydantic에 대해 간단하게 설명해보면
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
# str다음에 = OOO으로 default값이 없으면 필수로 들어가야 한다.
description: Union[str, None] = None
# str형으로 적어야 default값이 있으므로 적어도 되고 적지 않아도 된다.
price: float
tax: Union[float, None] = None
변수를 적고 타입을 적고 default값을 적어주지 않는다면 보내는쪽에서 무조건 적어주어야 한다.
타입 다음에 = None, '김아무개' 등으로 default값이 있다면 적지 않아도 괜찮다.
쿼리문으로 조금 더 자세하게 값의 범위를 정할 수도 있다.
DB에 50글자까지 저장하게 해놓았는데 글자수가 많다거나
나이를 저장하는데 음수값이 들어오는 경우를 미연에 방지할 수 있다.
참고로 쿼리문은 body에 보내면 쿼리로 보내라고 알려준다.
Query라고 감싸진 값은 이런식으로 보내야 한다.
from typing import Union
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: Union[str, None] = Query(default=None, max_length=50)):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
간단한 부분은 클래스를 선언하지 않고 바로 처리하는 것으로 예제가 나와있다.
q: Union[str, None] = Query(default=None, max_length=50)
q를 받는데, 타입은 str형이거나 None이다. 그리고 default값은 None이고, q는 50글자까지만 보낼 수 있다고 해석하면 된다.
from typing import Union
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(
q: Union[str, None] = Query(
default=None, min_length=3, max_length=50, regex="^fixedquery$"
)
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
이건 정규식인데 나는 잘 안쓸 것 같다.
regex에 정규식을 쓰면 된다.
from typing import Union
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(
q: Union[str, None] = Query(
default=None,
title="Query string",
description="Query string for the items to search in the database that have a good match",
min_length=3,
)
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
title과 description은 함수에 대해 설명하는 변수이다.
나중에 본인이 알아 먹을 수 있게 적어놓는다고 생각하면 편하다.
변수값이라서 보내는쪽에서 title과 description에 값을 넣어서 보낼 수 있다.
from fastapi import FastAPI, Path, Query
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
*,
item_id: int = Path(title="The ID of the item to get", ge=0, le=1000),
q: str,
size: float = Query(gt=0, lt=10.5)
):
results = {"item_id": item_id, "size": size}
if q:
results.update({"q": q})
return results
그리고 Query와 비슷하게 Path라는 것도 있다.
이 코드에서는 설명할 부분이 조금 있다.
먼저
1. read_items( *, :
이거는 기본값이 없는 변수 앞에 기본값이 있는 변수가 들어올 수 없는데 이를 해결하는 문법이다.
q는 default값이 없고, item_id는 default값이 있다.그냥 q와 item_id의 순서를 바꾸면 해결될 일이지만 신기한 문법이라 한번 사용해본다.
2. Path :
Path는 경로매개변수에 사용한다. 데코레이터에 적혀있듯이 경로에 적어주는 변수이다.
통신하는 방법은 위 사진과 같다.
여기서도 정해주었던 0<= item_id <= 1000, 0< size <10.5를 지켜주지 않으면 에러가 발생한다.
그리고 Path라고 써주었던건 꼭 경로매개변수에 적어주어야 하고, Query로 선언한건 Query에 보내주어야 한다.
3. ge, gt, lt, le:
ge는 greater than or equal의 약자이다. 크거나 같은 ( >= ) 의 의미다.
gt는 greater than의 약자이다. 커야 한다는 ( > ) 의 의미다.
lt와 le는 작거나, 작거나 같은의 의미다.
다음엔 이제 body에 보내는 방법에 대해 조금 더 자세하게 공부해본다.
Fast API 공부해보기 #4 body 사용하여 데이터 주고 받기
Fast API 공부해보기 #3 pydantic, query, request body Fast API 공부해보기 #2 경로 동작 생성 Fast API 공부해보기 #1 특징 및 설치 백엔드로 Django, flask만 사용하다가 가볍게 사용하기에 Fast API도 좋다고 하여
beomcoder.tistory.com
'개발 > 파이썬 백엔드 프레임워크' 카테고리의 다른 글
Fast API로 백엔드서버 만들기 [1] (1) | 2023.10.26 |
---|---|
Fast API 공부해보기 #4 body 사용하여 데이터 주고 받기 (0) | 2023.02.23 |
Fast API 공부해보기 #2 경로 동작 생성 (0) | 2023.02.22 |
Fast API 공부해보기 #1 특징 및 설치 (0) | 2023.02.22 |
댓글