"매개변수" 또는 "변수"를 경로에 선언할 수 있다.
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_id는 int로 선언됨
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 하고 str과 Enum을 상속하는 서브 클래스를 만듦. str을 상속함으로써 API문서는 값이 string형이어야 하는 것을 알게 되고 제대로 렌더링 할 수 있게됨
from fastapi import FastAPI
fromenumimport Enumapp = 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}