Skip to Content
Suffering builds character

4.RESTful API 요약

REST(Representational State Transfer)는 Roy Fielding이 제안한 아키텍처 스타일로, HTTP라는 웹 기술을 기반으로 리소스를 자원으로 보고, 이를 일관된 방식(Uniform Interface)으로 처리함으로써 확장성, 단순성, 분산 환경에 강한 시스템 설계를 지향함

요소의미
리소스 식별(URI)명사 중심의 리소스 식별자
HTTP 메서드(Verbs)리소스에 대한 동작 (GET / POST / PUT / DELETE 등)
표현(Representation)JSON, XML 등의 리소스 표현 방식
상태 전이(State transfer)HATEOAS로 표현됨
무상태성(Stateless)요청마다 필요한 정보 포함
계층 구조(Layered system)게이트웨이, 캐시 등 중간 계층 허용

1. REST의 성숙도 모델

하지만 현존하는 실제 시스템들은 유지비용 때문에 로이 필딩이 주장하는 REST 아키텍처를 모두 지키기 어려운 경우가 많음

Leonard Richardson은 REST의 성숙도 모델(Richardson Maturity Model, RMM)을 제안함

이론상으로는 Level3까지 충족되어야 진정한 의미의 RESTful API라고 볼 수 있음

1-1. Level 0 – The Swamp of POX (Plain Old XML)

  • URI는 하나 (/api), 모든 동작은 POST, 메시지 본문만 바뀜
  • RPC 스타일과 비슷

단점
URI와 HTTP 메서드를 전혀 활용하지 않음, URI로 리소스를 식별하기 어려움

JSON 응답 값
POST /api { "method": "getUser", "params": { "id": 1 } }

1-2. Level 1 - 리소스 중심(Resource-Oriented)

  • 각 리소스를 개별 URI로 식별함 (예: /users/1)
  • 여전히 모든 동작은 POST로 처리
  • 단점 - HTTP 메서드의 의미 (GET, PUT, DELETE)를 제대로 활용하지 않음
HTTP
POST /users/1/delete

1-3. Level 2 - HTTP 메서드 활용(Method-Oriented)

  • 리소스를 URI로 식별하고, HTTP 메서드(GET, POST, PUT, DELETE 등)에 따라 동작을 구분
  • Restful API에 가까운 형태
  • 대부분의 현대 웹 API는 이 레벨을 유지하고 있음
  • JSON 응답 데이터만 가지고는 의미를 파악하기가 어려울 수 있음(필드의 수가 많을 경우)
HTTP
GET /users/1 // 사용자 조회 PUT /users/1 // 사용자 수정 DELETE /users/1 // 사용자 삭제 POST /users // 사용자 생성 { "id": 2025, "status": "SHIPPED" }

1-4. Level 3 - HATEOAS (Hypermedia as the Engine of Application State)

  • 서버가 클라이언트에게 응답 내에 링크를 포함해 상태 전이를 안내함
  • 클라이언트는 하드코딩된 URI 없이도 링크를 따라 다음 행동을 결정할 수 있음
JSON 응답 값
{ "id": 2025, "status": "SHIPPED", "_links": { "profile" : { "href": "/swagger-ui/index.html" } // API 참조 문서 링크 "self": { "href": "/orders/2025" }, // 현재 요청한 API URI "cancel": { "href": "/orders/2025/cancel" }, // 주문 취소 "track": { "href": "/orders/2025/track" } // 주문 상태 추적 } }
Last updated on