REST API

Representational State Transfer + Application Programming Interface

자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것

조건

  1. Client-Server 구조 → 의존성 없어야 함

    사용자 인터페이스와 데이터 스토리지의 분리

  2. Stateless: 각 요청은 독립적, 서버에 상태 정보 유지 X→ DDoS와 같은 보안 이슈로 인해 인증절차 구축

  3. Caching: 캐싱 기능을 적용 가능해야 함

  4. Uniform Interface: 데이터가 표준 형식으로 전송될 수 있도록 구성요소 간 통합 인터페이스 사용

  5. Layered System: 시스템이 계층 구조로 나뉘어야 함

    1. 보안

    2. 로드밸런싱 → 프록시

      로드밸런싱 : H/W, 트래픽 부하 조절

      프록시 : 경로 조절

      로드밸런서가 부하에 따라 서버를 생성할 수도 종료할 수도 있다.

  6. Self-descriptiveness: 전송되는 내용은 별도 문서 없이 쉽게 이해할 수 있어야 한다.

  7. (Optional) Code-On-Demand

    실행 가능 코드 형태로 기능 전송 가능

    정적 document를 사용할 때나 사용했지, 지금은 잘 사용하지 않는다.

구성

  1. Resource

    모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.

    구별: HTTP URI

  2. Verbs: HTTP Method

  3. Representations: HTTP Message Payload

    보편적으로 JSON, XML을 사용

설계 원칙

  1. 자원 식별

    인터넷의 모든 것은 고유한 주소를 가져야 한다

  2. 표현을 통한 자원 조작

    웹 페이지 정보 조작 시 특정 형식을 통해 CRUD등을 수행

  3. 자기 서술적 메시지

    수신측에서 별도 설명 없이도 해당 메시지를 이해 및 처리 가능하도록 정의

    e.g.
    Content-Type: text/html
    
  4. HATEOAS

    Hypermedia As The Engine Of Application State

    웹 페이지가 다른 페이지나 상태로 넘어갈 수 있는 링크 제공