[부록] REST API란?

sangminnn·2020년 4월 21일
0

부록

목록 보기
4/4

API란 ?

API는 Application Programming Interface의 약자로, 응용프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제공할 수 있게 만든 인터페이스이다.

그렇다면 이를 활용한 REST API란 무엇일까 ?

REST API ?

그렇다면 REST API란 무엇일까 ?

여기서 REST는 REpresentational State Transfer의 약자로 이는 웹에 존재하는 자원에 고유한 URI를 부여해 활용하는 방식으로

자원에 대한 주소를 지정하는 방법론을 말한다.

간단히 말하면, 자원을 주고받는 것을 어떻게 미리 알릴 것인지에 대한 것이다.

REST API의 구성

REST API는 3가지 요소로 구성이 되어있는데 이는

  • 자원(RESOURCE) - URI
  • 행위(Verb) - HTTP METHOD
  • 표현(Representations)

이 3가지로 나뉜다.

여기서 먼저 URI는 흔히 우리가 말하는 주소를 말하는데,

주소에 자원의 정보 에 대해서 주소값에 언급을 해주는 것이다.

그리고 이에 대한 동작은 행위인 HTTP Method로 표현하는데 이는 아래와 같다.

  • GET: 리소스를 조회
  • POST: 리소스를 생성
  • PUT: 리소스의 전체를 교체
  • PATCH: 리소스의 일부를 수정
  • DELETE: 리소스를 삭제

이 5가지 HTTP Method를 활용하여 흔히 말하는 CRUD(Create, Read, Update, Delete)를 구현하는 것이다.

REST의 특징

REST의 특징은 크게 5가지로 나뉘는데

이에 대해서 하나씩 살펴보자

1. Uniform (유니폼 인터페이스)

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

2. Stateless (무상태성)

REST는 HTTP Method를 기반으로 하기때문에 무상태성 성격을 가진다.

즉, 작업을 위한 상태 정보를 따로 저장하고 관리하지 않고 서버로 들어오는 요청만을 단순하게 처리한다.

이는 서비스의 자유도가 높아지고 구현이 단순해진다는 장점이 있다.

3. Self-descriptiveness (자체 표현 구조)

이 특징은 위의 REST API 구성에서 언급한 내용과 같이 REST API 메시지만 보고서도 어떤 동작인지를 쉽게 이해할 수 있다는 특징을 말한다.

4. Cacheable (캐시 가능)

이 또한 HTTP Method를 활용하기 때문에, 기존에 웹에서 사용하는 인프라를 그대로 활용가능하다는 특징이 있다

따라서 HTTP가 가진 캐싱 기능을 적용할 수 있다는 특징이 있다.

5. Client - Server 구조

REST 서버는 API를 제공하고, 클라이언트는 사용자 인증이나 세션, 로그인 정보등의 컨텍스트를 직접 관리하는 구조로 역할이 나뉘기 때문에

서로간의 포지션이 명확해지고 상호 의존도가 줄어들게 된다는 특징이 있다.

6. 계층형 구조

REST 서버는 다중 계층으로 구성될 수 있어 구조상의 유연성을 둘 수 있고, proxy나 gateway같은 네트워크 기반의 중간매체를 사용할 수 있다는 특징이 있다.

REST API 중심 규칙

REST API를 설계할 때에 가장 중요한 두가지 규칙이 존재한다.

하나씩 알아보자.

1. URI는 정보의 자원을 표현하는데, 리소스명은 동사보다 명사를 사용한다.

이 내용은 위에서 지속적으로 언급한 REST API의 가장 큰 특징이자 규칙으로

아래의 예시에서 보는 것처럼 유저에 대한 정보를 가지고 올 때에는 명사형태의 user 와 같은 표현을 사용한다.

GET /user/delete/3

2. 자원에 대한 동작은 HTTP Method 로 표현한다.

이 또한 위에서 언급한 내용이지만 HTTP Method 를 활용하여 행위를 표현해주는데

위의 예시는 REST API에 어긋난 방식이므로 2번 규칙을 적용해서 표현해주면

DELETE /user/3

위와 같은 코드로 표현해야 RESTful하게 표현하는 것이다.

profile
생각하며 코딩하려고 노력하는 개발자가 되겠습니다.

0개의 댓글