CS/네트워크

REST와 REST API

D_Helloper 2022. 11. 29. 15:28

Representational?

  • 어떠한 리소스의 특정 시점의 상태를 반영하고 있는 정보.
  • Representation data, representation metadata로 구성
  • “hello” ⇒ representation data
  • “Content-Type: text/plain”, “Content-Language:en” ⇒ representation metadata

REST(Representational State Transfer) ?

  • 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것
    • HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시
    • HTTP Method(POST, GET, PUT …) 을 통해 해당 자원에 대한 CRUD Operation을 적용하는 것
      • Create : 생성(POST)
      • Read : 조회(GET)
      • Update : 수정(PUT)
      • Delete : 삭제(DELETE)
      • Head : header 정보 조회(HEAD)
  • 월드 와이드 웹(www)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
    • 웹이 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
    • 네트워크 상에서 Client와 Server사이의 통신 방식 중 하나

서버와 클라이언트의 역할을 명확하게 분리할 수 있음

HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능

표준이 존재하지 않음

왜 REST를 써야 할까?

  • 다양한 클라이언트들이 등장하면서 서비스와 데이터 제공을 분리해야 할 필요가 생김
  • 멀티 플랫폼의 등장, 상호 간의 호환이 좋지 않은 경우가 있음

REST 구성 요소

  1. 자원(Resource) : HTTP URI
    • 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재
    • 자원을 구별하는 ID는 ‘/groups/:group_id’와 같은 HTTP URI
  2. 행위(Verb) : HTTP Method
    • HTTP 프로토콜의 Method 사용
  3. 표현(Representations of Resource) : HTTP Message Payload
    • Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답을 보냄
    • JSON, XML, TEXT, RSS 등

REST의 특징

  • Uniform Interface
    • 하나의 URL에는 하나의 데이터만 가져와야 함
    • HTTP 표준에만 따른다면 모든 플랫폼에서 사용이 가능하며 URI로 지정한 리소스에 대한 조작을 가능하게 하는 아키텍처 스타일
    • 특정 언어나 기술에 종속되지 않음
  • Server-Client(서버-클라이언트 구조)
    • 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client
  • Stateless(무상태)
    • HTTP 프로토콜이 Stateless Protocol 이므로, REST 역시 무상태
    • Client의 context를 Server에 저장하지 않음
  • Cacheable(캐시 처리 가능)
    • HTTP 프로토콜을 그대로 사용하므로 캐싱 기능을 적용할 수 있음
    • Last-Modified 태그, E-Tag를 활용하면 구현 가능
  • Layred System(계층화)
    • 다중 계층우로 구성 가능
      • API Server는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드 밸런싱, 암호화 등을 추가하여 구조상의 유연성
  • Code on Demand
    • Server로부터 스크립트를 받아 Client에서 실행, 반드시 충족될 필요는 없음

REST API ?

  • REST를 기반으로 API를 구현한 것

 

REST API의 설계 예시

CRUD HTTP Method Route
resource 들의 목록을 표시 GET /resource
resource 하나의 내용을 표시 GET /resource/:id
resource를 생성 POST /resource
resource를 수정 PUT /resource/:id
resource를 삭제 DELETE /resource/:id