1. Request
가. Paramater
1) type in request param
•
no type
→ response: path param으로 전달한 값이 문자열로 응답
{
"id": "1"
}
Plain Text
복사
→ code
@app.get("/books/{book_id}")
async def retrieve_books(book_id):
return {"id": book_id}
Plain Text
복사
•
type을 int로 지정
→ response: path param으로 전달한 값이 지정된 타입으로 응답
{
"id": 1
}
Plain Text
복사
→ code
@app.get("/books/{book_id}")
async def retrieve_books(book_id: int):
return {"id": book_id}
Plain Text
복사
•
type을 int로 지정했지만 param을 문자열로 전달할 경우 에러 발생
→ log: "GET /books/hello HTTP/1.1" 422 Unprocessable Entity
→ response body
{
"detail": [
{
"loc": [
"path",
"book_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}
Plain Text
복사
2) restrict path param with Enum
•
path param으로 전달하는 값이 Enum 클래스로 사전 정의된 값이 아니라면 에러 발생
→ request uri: http://localhost:8000/genres/non-fiction
→ response
{
"detail": [
{
"loc": [
"path",
"genre_name"
],
"msg": "value is not a valid enumeration member; permitted: 'action', 'science-fiction', 'love-fiction'",
"type": "type_error.enum",
"ctx": {
"enum_values": [
"action",
"science-fiction",
"love-fiction"
]
}
}
]
}
Plain Text
복사
→ 코드 참고
3) set query parm
•
타입을 지정하면 필수값으로 인식됨
•
기본값 지정 가능
•
Optional 타입 활용하여 None 값을 기본값으로 지정 가능
→ request uri: http://localhost:8000/books/1?needy=yes
→ response
{
"id": 1,
"needy": "yes",
"skip": 0,
"limit": null
}
Plain Text
복사
→ 코드 참고
Reference
•
Official Document
→ Advanced, https://fastapi.tiangolo.com/advanced/