일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Container
- 파이썬
- 코어 이더리움 프로그래밍
- Algorithm
- IMAGE
- 러스트
- rust
- fluent python
- BAEKJOON
- 플랫폼
- Thread
- 알고리즘
- dockerfile
- Refactoring
- 이더리움
- Network
- AWS
- 백준
- Ethereum
- Python
- Kubernetes
- function
- BlockChain
- guru
- docker
- Fast API
- RabbitMQ
- 전문가를 위한 파이썬
- 블록체인
- 동시성
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[3] Fast API Basic - Response 편 본문
728x90
1. Response Model
1) Response Model Basic
- 아래와 같은 함수의
response_model
옵션으로 원하는 모델을 설정하면 된다@app.get()
@app.post()
@app.put()
@app.delete()
- etc.
- 출력 데이터를 해당 객체로 변환
- 데이터 벨리데이션 수행
- 오픈 API 경로 작업에서 응답에 대한 JSON 스키마 추가
- 자동 문서화 시스템에 사용됨
- 출력 데이터를 모델의 데이터로 제한
2) Model In/Out
- password 같이 리턴되지 말아야하는 값은 UserOut이라는 클래스를 명시적으로 작성하여,
리턴될 때 해당 객체에 정의된 필드만 리턴되도록 구현할 수 있다.
class UserIn(BaseModel):
username: str
password: str
email: EmailStr
full_name: Optional[str] = None
class UserOut(BaseModel):
username: str
email: EmailStr
full_name: Optional[str] = None
@app.post("/user/", response_model=UserOut)
async def create_user(user: UserIn):
return user
3) response_model include/exclude
- 클래스 두개를 정리하는 것말고, 그냥 특정 클래스에 어떤 것만 추가하고 뺄지만 작성하고 싶을 땐!
간단히 옵션만 작성할 수 있음
@app.get(
"/users/{user_id}/name",
response_model=User,
response_model_include=["username", "email"],
response_model_exclude=["password"]
)
2. Response Status
from fastapi import FastAPI, status
app = FastAPI()
@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):
return {"name": name}
3. Response Union or AnyOf
- response_model로 정의된 것들 중에 맞는 타입으로 리턴됨
class BaseItem(BaseModel):
description: str
type: str
class CarItem(BaseItem):
type = "car"
class PlaneItem(BaseItem):
type = "plane"
size: int
items = {
"item1": {"description": "All my friends drive a low rider", "type": "car"},
"item2": {
"description": "Music is my aeroplane, it's my aeroplane",
"type": "plane",
"size": 5,
},
}
@app.get("/items/{item_id}", response_model=Union[PlaneItem, CarItem])
async def read_item(item_id: str):
return items[item_id]
4. Error
from fastapi import FastAPI, **HTTPException**
app = FastAPI()
items = {"foo": "The Foo Wrestlers"}
@app.get("/items/{item_id}")
async def read_item(item_id: str):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
return {"item": items[item_id]}
- custom exception handlers
- Handling Errors - FastAPI
5. API Docs
1) Tags
@app.get("/users/", tags=["users"]) # api의 테그를 딸 수 있음
2) Description
@app.post("/items/", response_model=Item, tags=["default"], summary="Create an item")
async def create_item(item: Item):
"""
Create an item with all the information:
- **name**: each item must have a name
- **description**: a long description
- **price**: required
- **tax**: if the item doesn't have tax, you can omit this
- **tags**: a set of unique tag strings for this item
"""
return item
728x90
'Python > Fast API' 카테고리의 다른 글
[6] Middleware, Background Tasks, Sub Application in Fast API (0) | 2021.07.30 |
---|---|
[5] Dependency Injection이란? in Fast API (0) | 2021.07.22 |
[4] Pydantic Model (0) | 2021.07.22 |
[2] Fast API Basic - Request 편 (2) | 2021.07.20 |
[1] Fast API로 한걸음! (0) | 2021.07.19 |
Comments