[FastAPI] 경로 매개변수

상준·2023년 9월 3일

FastAPI

목록 보기
2/3

"매개변수" 또는 "변수"를 경로에 선언할 수 있다.

from fastapi import FastAPI
app = FastAPI()

@app.get("/items") # /items 접속시
def read_item():
return {"Hello : World"} # hello World 데이터 보냄

@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}

경로 매개변수 item_id의 값은 item_id 인자로 전달됨

http://127.0.0.1:8000/items/ssj

{"item_id":"ssj"}

타입이 있는 매개변수

from fastapi import FastAPI
app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}

item_idint로 선언됨

http://127.0.0.1:8000/items/23

{"item_id":23}

함수가 반환하는 값은 문자열 "23"이 아니라 int형인 23
FastAPI는 자동으로 요청을 "파싱"함

데이터 검증

http://127.0.0.1:8000/items/ssj
HTTP 오류를 볼 수 있음

파이썬 타입을 선언하면 FASTAPI는 데이터 검증을함
오류는 검즈을 통과하지 못한 지점도 정확하게 명시함
이는 API와 상호 작용하는 코드를 개발하고 디버깅하는데 매우 유용함

Pydantic

str, float, bool 과 다른 복잡한 데이터 타입 선언을 할 수 있음

순서 문제

경로동작은 순차적으로 평가됨

e.g.) 현재 사용자의 데이터를 가져오는 /users/me/users/{user_id} 보다 먼저 선언되어야 함
그렇지 않으면 /users/{user_id}는 매개변수 user_id의 값을 "me"라고 생각하기 때문

사전정의 값
유효하고 미리 정의할 수 있는 경로 매개변수 값을 원한다면 파이썬 표준 Enum을 사용할 수 있음

Enum 클래스 생성
Enum을 import 하고 strEnum을 상속하는 서브 클래스를 만듦. str을 상속함으로써 API문서는 값이 string형이어야 하는 것을 알게 되고 제대로 렌더링 할 수 있게됨

from fastapi import FastAPI
from enum import Enum

app = FastAPI()

class Ai(str, Enum):
    chatgpt = "chatgpt"
    bard = "bard"
    clovax = "clovax"

@app.get("/ai/{ai_name}")
async def get_ai(ai_name: Ai):
if ai_name is Ai.chatgpt:
return {"ai_name": ai_name, "message": "openai"}
if ai_name.value == "bard":
return {"ai_name": ai_name, "message": "google"}

return {"ai_name": ai_name, "message": "naver"}

ai_name.value를 이용하여 실제값을 가져올 수 있음

경로 변환기
/files/{file_path:path}
매개변수의 이름은 file_path이고 마지막 부분 :path는 매개변수가 경로와 일치해야 함

from fastapi import FastAPI

app = FastAPI()

@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
return {"file_path": file_path}


파싱

HTTP 요청에서 전달되는 문자열을 파이썬 데이터로 변환
profile
컴공생 공부

0개의 댓글