POST Method
FastAPI 에서 POST Method는 다음과 같은 특징이 있다.
- Schema Dependency가 존재한다. (Pydantic)
- BaseModel을 상속 받은 객체로 인자를 넘겨 받아야 한다.
POST Method 예제 1
Pydantic의 이메일 (EmailStr), 파일 경로, 우편 번호, URL(HttpURL) 를 사용하면 다양한 형태의 값을 쉽게 검증 가능
from fastapi import FastAPI, status
from pydantic import BaseModel, HttpUrl
from typing import Optional
app = FastAPI()
class User(BaseModel):
name:str
url:Optional[HttpUrl] = None
@app.post("/users")
def create_user(user:User):
print('user 생성 성공!')
return {'message':'success'}
요청 1) 정상 반환 => 200 success {'mesage': 'success'}
curl -X 'POST' \
'http://127.0.0.1:8000/users' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "seonmin",
"url": "http://www.tistory.com"
}
요청 2) Pydantic HttpUrl Test => 422 entity Error: Unprocessable Entity
curl -X 'POST' \
'http://127.0.0.1:8000/users' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "seonmin",
"url": "this is url!"
}'
POST Method 예제 2
Response에 대한 Model도 정의 가능하다
response에 대한 필수 포함 필드, 제외 필드, 상태 코드 등도 설정 가능하다.
- response_model_inclue
- response_model_exclude
- status_code
from fastapi import FastAPI, status
from pydantic import BaseModel, HttpUrl
from typing import Optional
app = FastAPI()
class User(BaseModel):
name:str
url:Optional[HttpUrl] = None
@app.post("/user/response", response_model = User,
response_model_include={"name"}, status_code=status.HTTP_201_CREATED)
def create_user2(user:User):
return user
요청 1) name 필드만 포함된 결과로 반환 => 201 CREATED 및 { 'name': 'smkim' } 반환
curl -X 'POST' \
'http://127.0.0.1:8000/user/response' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "smkim",
"url": "http://www.naver.com"
}'
더 자세한 필드들은 해당 링크에서 확인 가능하다
'Python > FastAPI' 카테고리의 다른 글
[FastAPI] (6) 보일러 플레이트 (Boiler Plate) (0) | 2022.10.27 |
---|---|
[FastAPI] (5) FastAPI Validation - Path, Query, Field (0) | 2022.10.26 |
[FastAPI] (3) FastAPI 열거형 enum - GET (0) | 2022.10.05 |
[FastAPI] (2) FastAPI 경로 매개변수, 쿼리 매개변수 - GET (0) | 2022.10.04 |
[FastAPI] (1) FastAPI란? (+Setting) (0) | 2022.10.04 |