REST API의 이해

업데이트:

1. REST

  • REST는 Representational State Transfer라는 용어의 약자로서 웹의 장점을 최대한 활용할 수 있는 아키텍처
  • 자원(Resource)을 이름으로 구분하여 자원의 상태(information)을 주고 받는 것을 의미

2. REST 구성요소

  1. 자원 - URI
  2. 행동 - HTTP Method (POST, GET, PUT, DELETE)
  3. 표현 (Representations) - JSON, XML, TEXT 등 여러 형태로 나타남 즉 , HTTP URI를 통해 자원을 명시하고 HTTP Method를 활용하여 자원에 대한 CRUD Operation을 적용

3. RSET 장단점

장점

  • HTTP Protocol의 인프라를 그대로 사용, REST API 사용을 위한 별도의 인프라 필요 없음.
  • HTTP Standard Protocol에 따르는 모든 플랫폼에서 호환가능.
  • REST API 메시지가 의도를 쉽게 파악할 수 있음.
  • 서버와 클라이언트의 역할을 명확하게 분리.

단점

  • 표준이 존재하지 않음.
  • 구형 브라우저가 제대로 지원하지 못함.
  • 사용할 수 있는 메소드가 4가지 밖에없음.

4. REST가 필요한 이유

  • 다양한 클라이언트 등장.
  • 애플리케이션 분리 및 통합.
  • 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용.

5. REST 특징

1) Uniform (인터페이스 일관성)

  • Unifirom Interface는 URI로 지정한 리소스에 조작을 한정적인 인터페이스로 수행.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼 사용 가능.

2) Stateless (무상태성)

  • HTTP 프로토콜은 Stateless Protocol으로 REST 역시 무상태성 성격을 갖음.
  • 작업을 위한 상태정보를 따로 저장, 관리 하지 않음.
  • 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해짐.

3) Cacheable (캐시 가능)

  • HTTP라는 기존 웹표준을 그대로 사용. 즉, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능.
  • 특히, HTTP가 가진 캐싱 기능이 적용 가능.(Last-Modified tag, E-Tag)
  • 대량의 요청을 효율적으로 처리하기 위해 캐시가 요구됨 -> 서버의 자원 이용률 향상

4) Self-descriptiveness (자체 표현 구조)

  • REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 가능.

5) Client - Server 구조

  • 자원을 요청하는 쪽 Client, 자원 있는쪽 Server.
  • Client : 사용자 인증이나 context(세션, 로그인정보) 직접 관리
  • REST Server : API를 제공 하고 비지니스 로직 처리 및 저장
  • 서로 의존성이 줄어듬

6) Layered System (계층형 구조)

  • REST Server 다중 계층으로 구성될 수 있음. (보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 줄 수 있음)
  • PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용 할 수 있음.

6. REST API 설계.

  • REST API의 정의 : REST 기반으로 서비스 API를 구현한 것
  • 설계 방법론 :
    • URI는 정보의 자원을 표현.(리소스명은 동사보다는 명사를 사용)
    • Resource에 대한 행위는 HTTP Method로 표현.

    • ex) 회원정보를 추가하는 URI
        GET /members/insert/2 (x)  - GET 메서드는 리소스 생성에 맞지 않습니다.
        POST /members/2       (o)
      
    • 슬레시 구분자(/)는 계층 관계를 나타냄
        http://restapi.example.com/houses/apartments
        http://restapi.example.com/animals/mammals/whales
      
  • 참고 응답 상태코드
    • 1xx : 전송 프로토콜 수준의 정보 교환
    • 2xx : 클라어인트 요청이 성공적으로 수행됨
    • 3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함
    • 4xx : 클라이언트의 잘못된 요청
    • 5xx : 서버쪽 오류로 인한 상태코드

7. RESTful 개념

  1. RESTful이란
    • RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어
    • ‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있음.
    • 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다.
  2. RESTful의 목적
    • 사용하기 쉬운 REST API를 만드는 것