파이썬 포맷 문자열이 사용하는 동일한 문법으로 "매개변수" 또는 "변수"를 경로에 선언할 수 있다
예시)
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
http://127.0.0.1:8000/items/foo
로 이동하면 {"item_id":"foo"}
라는 응답을 볼 수 있다위의 코드에서 파이썬 표준 타입 어노테이션을 사용하여 함수에 있는 경로 매개변수의 타입을 선언할 수도 있다.
@app.get("/items/{item_id}")
async def read_item(item_id:int):
http://127.0.0.1:8000/items/3
을 열면 {"item_id":3}
라는 응답을 볼 수 있다
경로의 타입을 int로 설정했으므로 브라우저에서 경로를 str 등으로 주게 되면 아래와 같은 에러가 발생한다 (이는 int와 float 사이에도 동일)
{
"detail": [
{
"loc": [
"path",
"item_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
경로 동작을 만들때 고정 경로를 갖고 있는 상황들을 맞닦뜨릴 수 있다.
/users/me처럼, 현재 사용자의 데이터를 가져오려고 할 때, 사용자 ID를 이용해 특정 사용자의 정보를 가져오는 경로 /users/{user_id}도 있으면
경로 동작은 순차적으로 평가되기 때문에 /users/{user_id} 이전에 /users/me를 먼저 선언해야 한다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"}
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
그렇지 않으면 /users/{user_id}는 매개변수 user_id의 값을 "me"라고 "생각하여" /users/me도 연결한다.
사전정의 값부터 정리 다시