본문 바로가기

Programming/프로그래밍 내용 정리

REST API가 뭔가요?

📍 REST : Representational State Transfer 

 

  • 직역하자면 대표적인 상태 전달
  • 애플리케이션 개발의 *아키텍처 중 하나 (*아키텍처 : 애플리케이션을 설계, 제작하는데 사용하는 패턴과 기술의 총칭)
  • 웹 애플리케이션 상에 존재하는 모든 리소스에 대해 고유의 URI를 부여한 후
  • HTTP Method(GET, POST, PUT, DELETE)를 이용해 리소스에 대해 *CRUD 명령을 적용 

(*CRUD : Create, Read, Update, Delete의 줄임말 )

출처 : https://phpenthusiast.com/blog/what-is-rest-api

 

출처 : https://poiemaweb.com/js-rest-api

 

 


📍 REST의 구성요소 3가지

 

  • 자원 (Resource) - URI : 서버에 존재하는 데이터의 총칭. 모든 자원은 고유의 URI를 가짐

 

  • 행위 (Verb) - HTTP Method : 클라이언트가 HTTP Method를 이용하여 자원을 조작하는 것을 의미

 

  • 표현 (Representations) : 클라이언트가 HTTP Method로 자원을 조작하면 버가 그에 대한 응답(JSON 등)을 보내는 것을 의미

 


📍 REST 장점

 

- Easy to use (쉬운 사용)

  HTTP 메소드를 그대로 사용하기 때문에 별도의 다른 이해가 필요하지 않다.

  또한 메시지 자체를 파악하기 쉽고 Stateless한 특성 때문에 다른 맥락을 따로 이해할 필요가 없어서

  독립적으로 URI와 메소드만 이해하면  된다.


- Complete Seperation between Client and Server(명확히 분리된 클라이언트-서버)

   서버와 클라이언트가 독립적이기 때문에 클라이언트의 컨텍스트를 따로 저장할 필요가 없고

   별도의 세션 정보를 유지할 필요가 없다. 클라이언트의 요청에만 응답하면 된다.


- Detail expression for specific data type (원하는 데이터 표현 가능)

  헤더 부분에 URI에 대한 처리 메소드를 명시하고, 필요한 실제 데이터는 body부분에 표현하도록 분리시킨다.

  페이 로드 부분을 JSON, XML등 원하는 표현 언어로 사용할 수 있다는 장점이 있다.

 


📍 REST 단점

 

- Absence of Standard (표준의 부재)

  공식적인 표준이 없어서 관리하는 데 어려움이 있다.


- Restriction of HTTP Method(HTTP 메소드의 제한)   

  사용할 수 있는 메소드가 4개 뿐이라서 복잡한 기능과 세부 기능을 구현하는 데 제약이 있다. 

 


📍 REST 특징

 

1. 서버-클라이언트 구조(Server-Client Architecture)
  서버는 API 제공, 클라이언트는 유저에 대한 처리를 전담하는 구조를 가지기 때문에 

  클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 된다.

 


2. 무상태성(Stateless) 

   REST는 각각의 요청에 대한 정보를 저장하지 않고 별개의 요청으로 처리한다. 

   세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 된다.



3. 캐시 가능(Cacheable)

   HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용할 수 있다.

   따라서 HTTP가 가진 캐싱 기능을 적용해 같은 URI에 대한 반복된 요청을 효율적으로 처리할 수 있다.

 

 

4. 일관된 인터페이스(Uniform Interface)
   HTTP를 사용할 수 있는 환경이라면 플랫폼에 상관없이 사용할 수 있으며 리소스의 타입에 상관 없이 같은 형태의 요청으로 처리된다.



5. 자체적인 표현 구조(Self-Descriptiveness)
   REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다.

 


6. 계층 구조(Layered System)
   클라이언트는 대상 서버와 직접 통신하는지 아니면 중간 서버와 통신하는지 알 수 없다.

   따라서 클라이언트와 서버의 통신 사이에 보안이나 로드 밸런싱등을 위한 중간 계층을 추가할 수 있다.