Python/FastAPI

[FastAPI] (4) FastAPI POST 작성법

yubi5050 2022. 10. 26. 16:18

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"
}'

 

 

더 자세한 필드들은 해당 링크에서 확인 가능하다

 

Response Model - FastAPI

Response Model You can declare the model used for the response with the parameter response_model in any of the path operations: @app.get() @app.post() @app.put() @app.delete() etc. Note Notice that response_model is a parameter of the "decorator" method (g

fastapi.tiangolo.com