FastAPI에서의 HTTP 메서드는 클라이언트가 서버에게 어떤 요청을 할때 요청하는 방식을 정의한다.
이러한 메서드를 사용하여 요청의 의도를 명확히 하고, 적절한 엔드포인트에 연결하는 라우팅을 수행하게 한다.
● GET: GET 메서드는 서버로부터 정보를 요청할 때 사용한다. 데이터를 가죠오는 read-only 작업에 적합나다.
● POST: POST 메서드는 서버에 데이터를 전송하여 새로운 리소스를 생성하려고 할때 사용한다. 예를 들어 사용자를 등록하거나 게시글을 작성하여 저장할 때 사용한다. POST 요청은 데이터를 서버의 특정 경로에 제출하고, 해당 데이터는 주로 요청 바디에 포함된다.
● PUT: PUT 메서드는 지정된 리소스의 전체 업데이트를 수행한다. PUT은 리소스가 존재하지 않을 경우 새로 생성할 수 도 있지만, 주로 기존 리소스의 완전한 교체(수정)을 의미한다.
● DELETE: DELETE 메서드는 지정된 리소스를 삭제할 때 사용한다.
1. 코드작성
# main.py로 작성
from fastapi import FastAPI
app = FastAPI() # FastAPI 인스턴스를 생성한다.
@app.get("/")
def read_root():
return {'message':'Hello World!!'}
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
@app.get("/items/")
def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
@app.post("/items/")
def crate_item(item: dict):
return {"item": item}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: dict):
return {"item_id": item_id, "updated_item" : item}
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
return {"message": f"Item {item_id} has been deleted"}
2. 테스트
1) POST 메서드 테스트
FastAPI에서 요청 바디로 부터 데이터를 받기 위해서는 반드시 Pydantic 모델을 사용해야 하는 것은 아니지만 Pydantic 모델을 사용하는 것이 권장사항이다.
여기서는 해당 모델을 익히기 전이라 위 코드에서는 직접 파이썬 내장 dict 타입을 사용했다.
]# curl -X POST "http://127.0.0.1:8000/items/" -H "Content-Type: application/json" -d "{\"name\": \"item1\", \"value\": 11}"
curl 명령어에서 -d 옵션을 사용 시 Content-Type 헤더를 지정치 않으면 기본적으로 application/x-www-form-urlencoded로 설정된다. 그래서 이 경우 -H "Content-Type: application/json" 헤더를 추가해야 한다.
이렇게 함으로써 curl이 데이터를 JSON으로 보내고 FastAPI가 이를 dict로 변환하여 정상동작 하게 된다.
2) PUT 메서드 테스트
아이템 ID가 2인 아이템의 정보 업데이트하기
]# curl -X PUT "http://127.0.0.1:8000/items/2" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"name\": \"updated_item\", \"value\": 22}"
이 경우도 POST 메서드와 마찬가지로 -H "Content-Type: application/json" 헤더를 추가해야 한다.
3) DELETE 메서드 테스트하기
아이템 ID가 2인 아이템 삭제하기
]# curl -X DELETE "http://127.0.0.1:8000/items/2" -H "accept: application/json"