한양과학기술고등학교

에듀테크 프로젝트 대시보드

REST API 설계 원칙

REST란?

REST(Representational State Transfer)는 서버의 기능을 "자원(Resource)" 중심의 URI와 HTTP 메서드로 표현하는 설계 스타일이다. /items/1 은 "1번 아이템"이라는 자원을, 어떤 행위를 할지는 GET·POST·PUT·PATCH·DELETE 같은 메서드가 결정한다. 서버는 요청 사이에 클라이언트 상태를 기억하지 않는다 (Stateless) — 매 요청은 그 자체로 필요한 정보를 모두 담아야 한다.

메서드별 안전성 & 멱등성

안전(Safe): 서버 상태를 바꾸지 않는다  |  멱등(Idempotent): 같은 요청을 N번 반복해도 1번 보낸 것과 결과가 같다.

메서드의미SafeIdempotent
GET자원 조회✓✓
POST새 자원 생성✗✗
PUT자원 전체 교체✗✓
PATCH자원 부분 수정✗✗ (보통)
DELETE자원 삭제✗✓

장바구니 API 시뮬레이터

버튼을 눌러 가상의 /items API에 요청을 보내보자. 같은 버튼을 여러 번 눌러 POST(멱등 아님)와 PUT/DELETE(멱등)의 차이를 직접 확인할 수 있다.

요청 보내기

버튼을 눌러 요청을 보내보세요. POST는 누를 때마다 새 아이템이 늘어나지만, PUT과 DELETE는 몇 번을 눌러도 최종 상태가 같아집니다.

서버 자원 상태 — /items

요청 로그

HTTP 상태 코드 카테고리

카드를 클릭하면 대표 코드 예시를 볼 수 있다.

FastAPI로 본 REST 라우팅

이 사이트도 FastAPI로 만들어졌다 — 자원과 메서드가 실제 코드에서 어떻게 매핑되는지 보자.

# 자원: items (컬렉션) / items/{item_id} (개별 자원) @router.get("/items") # 목록 조회 — Safe, Idempotent def list_items(): ... @router.post("/items") # 생성 — 호출마다 새 자원 def create_item(item: Item): ... @router.put("/items/{item_id}") # 전체 교체 — Idempotent def replace_item(item_id: int, item: Item): ... @router.delete("/items/{item_id}") # 삭제 — Idempotent def delete_item(item_id: int): ...