경로 매개변수(Path Parameters)는 흔히 우리가 말하는 URL 경로에 들어가는 변수를 의미합니다.
아래 코드에서 user_id가 경로 매개변수입니다.
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id):
return {"user_id": user_id}
if __name__ == "__main__":
uvicorn.run("main:app", reload = True)
HTTP 파이로 다음과 같이 호출하면,
$ http :8000/users/123
이와 같은 결과를 반환합니다.
HTTP/1.1 200 OK
content-length: 15
content-type: application/json
date: Wed, 14 Apr 2021 13:50:43 GMT
server: uvicorn
{
"user_id": "123"
}
우리는 123을 문자열이 아닌 정수형을 의도했지만 실제로는 문자열로 응답이 왔습니다. 앞서 말했듯이 http 통신은 타입 없이 전부 문자열로만 통신합니다. 이를 해결하려면 어떻게 해야 할까요?
바로 타입 힌트를 추가해주면 됩니다.
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
def get_user(user_id: int): # 추가: 타입 힌트 int
return {"user_id": user_id}
if __name__ == "__main__":
uvicorn.run("main:app", reload = True)
다시 한번 HTTP 파이를 사용해서 값을 호출하면 다음과 같은 응답이 옵니다.
$ http :8000/users/123
{
"user_id": 123
}
정수형으로 제대로 응답이 온 것을 확인할 수 있습니다.
만약 누가봐도 정수형 타입이 아닌 값을 호출하면 어떻게 될까요?
$ http :8000/users/12.3
HTTP/1.1 422 Unprocessable Entity
content-length: 104
content-type: application/json
date: Wed, 14 Apr 2021 13:59:06 GMT
server: uvicorn
{
"detail": [
{
"loc": [
"path",
"user_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
user_id 의 값으로 부동소수형 12.3을 넣어줬더니 응답코드 422와 함께 위와 같은 오류 메시지가 나타났습니다.
타입 걱정없이 FastAPI가 알아서 적절한 응답을 보내 줍니다. 이런 기본적인 오류에 대해서 따로 코딩 할 필요가 없기 때문에 생산성이 올라가게 됩니다.
'FastAPI' 카테고리의 다른 글
FastAPI 쿼리 매개변수 (0) | 2024.01.16 |
---|---|
순서 문제 (1) | 2024.01.15 |
HTTP 파이 (0) | 2024.01.15 |
FastAPI 설치 및 Pydantic 소개 (0) | 2024.01.15 |
FastAPI란 .. ? (2) | 2024.01.15 |