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 |