RestAPI란?

API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)

→ 응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻합니다. 주로 파일 제어, 창 제어… 등

인터페이스(Interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면임. 즉, 사용자가 기기를 쉽게 동작시키느데 도움을 주는 시스템을 의미합니다.

REST(Representational State Transfer)

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

REST는 HTTP 기반으로 필요한 자원에 접근하는 방식을 정해놓은 아키텍처라고 합니다.

구성 요소

  • 자원(Resource)

    - 자원은 서버에 존재하는 데이터의 총칭이며 모든 자원은 고유의 URI(URL)을 가지며 클라이언트는 이 URI를 지정하여 해당 자원에 대해 CRUD 명령을 수행할 수 있습니다.
  • 행위(Verb)

     - 행위는 클라이언트가 HTTP Method를 이용하여 자원을 조작하는 것을 의미합니다.
  • 표현(Representation)

     - 클라이언트가 HTTP Method로 자원을 조작하면 서버가 그에 대한 응답(JSON, XML)을 보내는데 그것을 의미합니다.

특징

  • 서버-클라이언트 구조(Server-Client Architecture)

    - 서버는 API 제공, 클라이언트는 유저에 대한 처리를 전담하는 구조를 가지기 때문에 서버와 클라이언트의 역할을  분명하게 구분할 수 있습니다.
  • 무상태성(Stateless)

    - HTTP를 이용하는만큼 Stateless의 특성을 가집니다. 각각의 요청에 대한 정보를 저장하지 않고 별개의 요청으로 처리합니다. 덕분에 구현이 쉽고 서버의 부담을 덜어줄 수 있습니다.
  • 캐시 가능(Cacheable)

    - HTTP를 사용하기 때문에 웹의 기본 인프라를 사용할 수 있습니다. 따라서 캐시 기능을 이용해 같은 URI에 대한 반복된 요청을 효율적으로 처리할 수 있습니다.
  • 일관된 인터페이스(Uniform Interface)

    - HTTP를 사용할 수 있는 환경이라면 플랫폼에 상관없이 사용할 수 있으며 리소스의 타입에 상관 없이 같은 형태의 요청으로 처리됩니다.
  • 자체적인 표현 구조(Self-Descriptiveness)

    - JSON, XML 등을 이용하는 메세지 구조로 해당 메세지가 무엇을, 어떤 행위를 의미하는지 지관적으로 이해할 수 있습니다.
  • 계층 구조(Layered System)

    - 클라이언트는 대상 서버와 직접 통신하는지 아니면 중간 서버와 통신하는지 알 수 없습니다. 따라서 클라이언트와 서버의 통신 사이에 보안이나 로드 밸런싱등을 위한 중간 계층을 추가할 수 있습니다.

장점

  • 별도의 인프라 구축이 필요 없음

    - HTTP를 사용하기 때문에 별도의 인프라를 구축할 필요가 없습니다.
  • 클라이언트와 서버의 분리

    - 클라이언트와 서버는 REST API를 통해 정보를 주고 받기 때문에 둘 간의 역할이 명확하게 분리됩니다.
  • 플랫폼에 독립적

    - HTTP를 사용 가능한 환경이라면 플랫폼에 상관없이 사용 가능합니다.
  • 쉬운 사용

    - 메세지가 자체적으로 무엇을 의미하는지 표현하고 있기 때문에 사용이 쉽습니다.

단점

  • 표준이 존재하지 않음

    - 명확한 표준이 존재하지 않습니다. 따라서 REST의 특징을 따르지 않으면서 REST API로 설계되는 이상한 API가 탄생할 수 있으며 관리가 어렵습니다.
  • HTTP Method의 한계

    - HTTP Method를 사용하기 때문에 CRUD라는 단순한 행위의 Method만 지원합니다.
  • RDBMS와 맞지 않음

    - REST에서는 리소스를 JSON, XML등의 형태로 표현하는데 이는 RDBMS와는 맞지 않은 형태입니다. 그래서 NoSQL이 더 선호되는 추세입니다.

'Web' 카테고리의 다른 글

Session VS Cookie VS JWT  (1) 2024.01.02

+ Recent posts