API

응용 프로그램에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

REST란, REpresentational State Transfer 의 약자이다. 여기에 ~ful 이라는 형용사형 어미를 붙여 ~한 API 라는 표현으로 사용된다. 즉, REST 의 기본 원칙을 성실히 지킨 서비스 디자인은 'RESTful'하다라고 표현할 수 있다.

REST가 디자인 패턴이다, 아키텍처다 많은 이야기가 존재하는데, 하나의 아키텍처로 볼 수 있다. 좀 더 정확한 표현으로 말하자면, REST 는 Resource Oriented Architecture 이다. API 설계의 중심에 자원(Resource)이 있고 HTTP Method 를 통해 자원을 처리하도록 설계하는 것이다.

자원이라 하면, 서버에서 전송되는 데이터 전체를 이야기 할 수 있다. /blog/1 같은 URI를 통해서 자원을 get post patch delete put 등 메소드를 통해 전달하거나 받는 패턴이다. 같은 URI라도 통신 메소드에 따라 (post, get..) 다른 행동을 줄 수 있다.

자원 (Resource) : URI (Uniform Resource Identifier, 인터넷에 있는 자원을 나타내는 고유 주소)

행위 (Verb) : HTTP Method

표현 (Representations)

REST 특징

  1. Uniform Interface (유니폼 인터페이스) URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다. get, post, patch, put, delete등의 조작을 통일되고 한정적으로 제공한다.

  2. Stateless (무상태성) REST는 무상태성 성격을 갖는다. 다시 말해 작업을 위한 상태 정보를 따로 저장하지 않는다. 세션 정보나 쿠키 정보를 따로 저장하지 않기 때문에 들어오는 요청만 단순히 처리하면 된다. 때문에 자유도가 높아지고 서버에서 불필요한 정보를 가지고 있지 않기 때문에 구현이 쉽게 가능해진다.

  3. Casheable (캐시 가능) HTTP 웹 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용 할 수 있다. 따라서 HTTP가 가진 캐싱 기능을 적용할 수 있다. HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.

  4. Self-descriptiveness REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있음.

  5. Client - Server 구조 REST 서버는 API를 제공하므로 클라이언트와 서버의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간의 의존성이 줄어듦

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

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

  1. 리소스 와 행위 를 명시적이고 직관적으로 분리한다. (제일 중요)
  2. Message 는 Header 와 Body 를 명확하게 분리해서 사용한다.