8 Dec 2020

REST와 RESTful

REST


REST란

  • URI와 HTTP메소드를 이용해 객체화된 서비스에 접근하는것

  • 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든것을 의미한다.

    • 자원(resource)의 표현(representation)에 의한 상태 전달

  • 월드 와이드 웹(WWW)과 같은 분산 하이퍼 미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식


REST 구성요소

  • Resource

    • 유일한 ID를 가지는 Resource가 서버에 존재하고, 일반적으로 명사형단어를 조합한 URI로 이루어져 있다.

  • Method

    • GET,POST,PUT,DELETE등과 같이 Resource를 조작할 수 있는 동사형 단어를 Method라고 하며, 클라이언트는 URI를 이용해서 Resource를 지정하고 해당 Resource를 조작하기 위해 Method를 사용한다.

  • Representation of Resource

    • 클라이언트가 서버로 요청을 보냈을 때, 서버가 응답으로 보내주는 Resource의 상태를 Representation이라고 한다. REST에서 하나의 Resource는 여러 형태의 Representation으로 나타낼 수 있다. ex) json,xml


REST 의 특징

  • Uniform(유니폼 인터페이스)

    • Uniform interface 는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.

  • Stateless(무상태성)

    • REST는 무상태로 상태정보를 따로 저장및 관리 하지 않는다. 세션이나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API서버는 들어오는 요청만 단순 처리 하면된다. 그렇기 때문에 서비스의 자유도가 높아 지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.

  • Cacheable(캐시 가능)

    • REST의 특징 중 하나로 HTTP 라는 웹 표준을 그대로 사용하기 때문에 웹에서 사용하는 기존의 인프라를 그대로 사용할 수 있으며 따라서 HTTP가 가진 캐싱 기능이 적용가능하다.

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

    • REST API메시지만 보고도 쉽게 이해 할 수 있는 자체 표현 구조로 되어있다.

  • Client-Server구조

    • Client는 사용자 인증이나 세션,로그인정보 등을 직접 관리하고 책임진다.

    • REST 서버는 API를 제공하고 비지니스 로직처리를 책임진다.

    • 각각의 역할이 구분되있어 서로 간 의존성이 줄어든다.

  • 계층구조

    • REST 서버는 다중 계층으로 구성될 수 있으며 로드밸런싱,암호화 계층을 추가해 구조상 유연성을 가질 수 있고 Proxy,게이트 웨이 같은 네트워크 기반의 중간매체를 사용할 수 있다.

RESTful하게 API를 디자인 한다는 것은 무엇을 의미하는가?

  • 리소스와 행위를 명시적이고 직관적으로 분리한다.

    • 리소스는 URI로 표현되고 리소스가 가리키는 것은 명사로 표현되야한다.

    • 행위는 HTTP Method(get,post,put,delete)을 분명한 목적으로 사용한다.

  • API 버전을 관리한다.

    • 환경은 항상 변하기 때문에 API의 signature가 변경될 수 있음을 주의한다.

    • 특정 API를 변경할 때는 반드시 하위호환성을 보장해야한다.

  • 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.

    • URI가 플랫폼 중립적이어야 한다.

RESTful하게 API를 디자인 했을때 장점

1. Open API를 제공하기 쉽다.
2. 멀티플래폼 지원 및 연동이 용이하다.
3. 원하는 타입으로 데이터를 주고 받을 수 있다.
4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.

단점

1. 사용 메소드가 4가지 밖에 없다.
2. 분산환경에 부적합하다.
3. HTTP통신 모델에 대해서만 지원한다.

Tags:
0 comments