FastAPI Post & Async Function

FastAPI Post 에 대해 알아보기 전에, HTTP Get 과 Post의 차이점에 대해서 우선 언급하고자 한다.

 

HTTP Get 과 Post의 차이

Get 과 Post 둘 다 HTTP 방법이며, 둘 다 브라우저가 서버에 "요청" 하는 행위이다.

 

Get 

  • Server 에서 Data를 받아오기 위해 자주 활용
  • 요청할 때 데이터 전송 시 URL 주소 끝에 Parameter Value로 전송되며 이를 Query String 이라고 함
  • Ex) https://devidas.tistory.com/640?name=김병찬 과 같이 제공하는 것
  • HTTP Body에 담아서 전송하지 않음

Post

  • Resource를 Create/Update 하도록 설계된 방법
  • 필요 데이터를 HTTP Body에 담아 전송하므로 URL로 데이터가 노출되지 않음

 

FastAPI 에서 Post를 구성하는 방법

Get과 마찬가지로, Post 일 때는 @app.Post 형식으로 annotation을 구성하면 됨

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
	return {"Hello" : "GET"}
    
@app.post("/")
def home_post(msg:str):
	return {"Hello" : "POST", "msg" : msg}

 

위 코드는 FastAPI 에서 get을 구성하는 방법과 post를 구성하는 방법 두 가지가 구현되어 있음

get, post 둘 다 / 경로로 받아오고 get일 경우 return이 hello, get 이며 post일 경우 msg에 받은 값을 활용해 return.

 

Swagger UI에서 Get과 Post 둘 다 나오는 것을 확인할 수 있으며 그 중 post를 통해 값을 전송하면 위와 같은 화면이 된다.

아직 Request Body를 제대로 구성하지 않았기 때문에 curl 명령어만 봐도 -d option 에 값이 들어가지 않고 URL Link에 값이 들어가는 등 완벽하지는 않다.

 

from fastapi Import FastAPI
from pydantic import BaseModel
from pydantic import Field

class DataInput(BaseModel):
	name: str

app = FastAPI()

@app.get("/")
def home():
	return {"Hello" : "GET"}
   
@app.post("/")
def home_post(data_request : DataInput):
	return {"Hello" : "POST", "msg" : data_request.name}

 

pydantic 을 활용해 input 형태를 구성한 방법으로, pydantic에 대한 자세한 설명은 다음 포스팅에서 설명하고자 한다.

이렇게 구성하면  data에  name : 김병찬 값이 들어가면서 post 다운 통신을 하는 것을 볼 수 있음.

이러한 이유와 더불어서 input, output format을 setting 하기 위해 pydantic을 많이 활용함. 

 

또한 post로 열어진 FastAPI Server에 Python Request를 활용하여 통신할 수도 있음.

 

 

'Data Engineer' 카테고리의 다른 글

빅데이터의 기초 지식  (3) 2024.12.19
Docker란?  (6) 2024.11.28