FastAPI 엔드포인트와 HTTP 메서드

예찬예찬·2024년 6월 5일

FastAPI

목록 보기
4/10
post-thumbnail

HTTP 메서드

  • 클라이언트가 서버에 요청을 할 때 어떤 종류의 요청을 하는 지!
    • GET: 서버로 부터 정보 조회
    • POST: 서버에 데이터를 전송하여 새로운 리소스를 생성하거나 데이터를 처리
    • PUT: 기존 리소스를 대체하기 위해
    • DELETE: 지정된 리소스를 삭제
    • PATCH: 리소스 일부를 수정
    • 그: HEAD (헤더만 동작하는 GET), OPTIONS (서버가 어떤 HTTP 메서드를 지원하지?), 그 외의 진단 메서드
    • FastAPI는 위 작성된 모든 메서드를 지원함
  • @app.get(), @app.post(), @app.put(), @app.delete(), @app.patch()

엔드포인트란?

  • 클라이언트의 요청을 처리하고 응답을 반환하는 API 지점 → 다른 말로 요청을 받아 처리하고 응답하는 함수
  • 엔드포인트
    • HTTP 메서드 + URL 경로
    • 데코레이터를 통해 구현

간단한 HTTP 매서드 예

라이브러리 및 로깅 설정

import logging
from fastapi import FastAPI, Form

# 로깅 설정
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

app = FastAPI()

# 간단한 데이터 저장소
items = {"1":{"name":"Pen"}, "2":{"name":"Pencil"}}
  • Form은 FastAPI의 파라미터를 받는 방법 중 하나
  • logging을 설정하여 로그를 보도록
  • 간단한 데이터를 미리 만들어 아래에서 쓰도록 하자

GET

@app.get("/items")
async def read_items():
    logger.info("Fetching all items")
    return items

POST

@app.post("/items/{items_id}")
async def create_item(item_id: str, name: str = Form(...)):
    items[item_id] = {"name": name}
    logger.info(f"Item created: {item_id} - {name}")
    return items[item_id]

PUT

@app.put("/items/{item_id}")
async def update_item(item_id: str, name: str = Form(...)):
    items[item_id] = {"name": name}
    logger.info(f"Item updated: {item_id} - {name}")
    return items[item_id]

DELETE

@app.delete("/items/{item_id}")
async def delete_item(item_id: str):
    if item_id in items:
        del items[item_id]
        logger.info(f"Item deleted: {item_id}")
        return {"message": "Item deleted"}
    else:
        logger.info(f"Item not found: {item_id}")
        return {"message": "Item not found"}

PATCH

@app.patch("/items/{item_id}")
async def patch_item(item_id: str, name: str = Form(...)):
    if item_id in items:
        items[item_id]["name"] = name
        logger.info(f"Item patched: {item_id} - {name}")
        return items[item_id]
    else:
        logger.info(f"Item not found: {item_id}")
        return {"message": "Item not found"}

위 코드 작성 후 /docs url로 가보면 아래와 같은 화면을 볼 수 있

profile
나는 오예찬

0개의 댓글