[파이썬] FastAPI - HTTP 메서드, Pydantic
시작에 앞서
해당 내용은 <가장 빠른 풀스택을 위한 Flask & FastAPI>, Dave Lee 지음. BJ Public 출판.
내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.
이전 내용
[파이썬] FastAPI - 타입 힌트
시작에 앞서해당 내용은 , Dave Lee 지음. BJ Public 출판.내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.이전 내용 [파이썬] FastAPI - 라우팅시작에 앞서해당
puppy-foot-it.tistory.com
HTTP 메서드
HTTP 메서드는 클라이언트가 서버에게 어떤 동작을 해달라고 요청하는 방식을 정의한다.
FastAPI는 이러한 메서드를 사용하여 요청의 의도를 명확히 하고, 적절한 엔드포인트에 연결하는 라우팅을 수행한다.
[HTTP 메서드 종류]
- GET: 이 메서드는 서버로부터 정보를 요청할 때 사용한다. 데이터를 가져오는 read-only 작업에 적합하며, 서버의 상태나 데이터를 변경하지 않는다. (상요자의 프로필 데이터나 게시글 목록을 가져올 때 등)
- POST: 서버에 데이터를 전송하여 새로운 리소스를 생성하려고 할 때 사용한다. (새 사용자 등록, 게시글 등록할 때 등) POST 요청은 데이터를 서버의 특정 경로에 제출하며, 해당 데이터는 주로 요청 바디에 포함된다.
- PUT: 지정된 리소스의 전체 업데이트를 수행한다. (사용자의 전체 프로필 업데이트 등) PUT은 리소스가 존재하지 않는 경우 새로 생성할 수 있지만, 주로 기존 리소스의 완전한 교체를 의미한다.
- DELETE: 지정된 리소스를 삭제할 때 사용한다. 이 요청은 서버에 리소스의 제거를 지시하며, 성공적으로 처리된 경우 리소스에 더 이상 접근할 수 없다. (사용자가 자신의 계정 삭제, 작성한 게시글 삭제 등)
▶ FastAPI를 사용하면 이러한 메서드를 각각의 라우팅 데코레이터(@app.get(), @app.post(), @app.put(), @app.delete() 등)와 함께 사용하여 다양한 HTTP 요청을 처리하는 API를 손쉽게 구성할 수 있다.
Fast API: HTTP 메서드 코드 작성
from fastapi import FastAPI #FastAPI 라이브러리 import
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI"}
@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 create_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"}
# 실행: uvicorn main:app --reload
코드 작성 후, 터미널에서 하단 명령어를 입력하여 실행
uvicorn main:app --reload
curl을 사용한 테스트
◆ POST 메서드
curl -X POST "http://127.0.0.1:8000/items/" -H "Content-Type: application/json" -d "{\"name\":\"item1\", \"value\":42}"
◆ PUT 메서드
아이템 ID가 1인 아이템의 정보를 업데이트
curl -X PUT "http://127.0.0.1:8000/items/1" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"name\": \"updated_item\", \"value\": 43}"
◆ DELETE 메서드
아이템 ID가 1인 아이템 삭제
curl -X DELETE "http://127.0.0.1:8000/items/1" -H "accept: application/json"
Pydantic (파이단틱)
★ 파이단틱과 관련된 보다 상세한 내용은 하단 링크 참고
[파이썬] Pydantic: 데이터 검증 라이브러리
Pydantic이해하기 쉬운 Pydantic: 데이터 유효성 검사와 데이터 모델링의 새로운 기준 Pydantic은 Python에서 가장 널리 사용되는 데이터 검증 라이브러리이다.Pydantic은 Python의 데이터 유효성 검
puppy-foot-it.tistory.com
FastAPI에서 Pydantic(파이단틱) 은 데이터 검증과 직렬화를 매우 쉽게 만들어준다.
[데이터 검증, 데이터 직렬화]
- 데이터 검증(data validation): 사용자나 다른 시스템이 보내는 데이터가 올바른 형식과 값인지 확인하는 과정. 데이터 검증을 통해 잘못된 정보를 사전에 차단할 수 있다. (예. 금액 입력 시 문자열 입력 방지)
- 데이터 직렬화(data serialization): 복잡한 데이터 구조를 바이트나 문자열로 변환해서 다른 시스템과 쉽게 데이터를 교환할 수 있는 형태로 만드는 것. ↔ 역직렬화: 문자열이나 바이트를 원래의 데이터 구조로 되돌리는 것
[데이터 검증, 데이터 직렬화가 필요한 이유]
- 데이터 검증: 잘못된 데이터가 처리되는 것을 막아서 버그나 다양한 문제 예방
- 데이터 직렬화: 서로 다른 시스템끼리 데이터를 쉽게 주고 받을 수 있게 해준다
▶ 데이터 요청을 위해 자주 사용하는 HTTP POST 메서드는 데이터를 요청 바디에 넣어서 전송하므로, POST 메서드로 API를 선언하는 경우에는 Pydantic 모델 사용을 고려할 필요가 있다.
◆ Pydantic 모델 적용의 예
Item 클래스가 Pydantic 모델이며, 이 모델은 name, price, is_offer 라는 세 가지 필드를 가진다.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
def create_item(item: Item):
return {"item": item.dict()}
위 코드를 저장 및 실행 한 후, curl로 POST 메서드를 테스트 해 본다.
curl -X POST "http://127.0.0.1:8000/items/" -H "accept:application/json" -H "Content-Type:application/json" -d "{\"name\": \"Bread\", \"price\": 3.5, \"is_offer\": true}"
Price를 문자열로 보내면 FastAPI가 자동으로 에러를 반환한다.
curl -X POST "http://127.0.0.1:8000/items/" -H "accept:application/json" -H "Content-Type:application/json" -d "{\"name\": \"Bread\", \"price\": \"invalid\", \"is_offer\": true}"
"Input should be a valid number, unable to parse string as a number","input":"invalid","url":"https://errors.pydantic.dev/2.8/v/float_parsing"
다음 내용
[파이썬] FastAPI - Pydantic (2)
시작에 앞서해당 내용은 , Dave Lee 지음. BJ Public 출판.내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.이전 내용 [파이썬] FastAPI - HTTP 메서드, Pydantic시작에
puppy-foot-it.tistory.com