본문 바로가기
카테고리 없음

FastAPI - Study 5일차 (HTTP 메서드)

by 고래(부와 성공) 2024. 12. 23.

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"