BUILD_SSO

[Web] REST API란? API, REST, RESTful에 대해 알아보자 본문

Web

[Web] REST API란? API, REST, RESTful에 대해 알아보자

sohyeonnn 2023. 5. 23. 16:31

글쓰기에 앞서...

백엔드 개발자라면 개발을 하며, 기업 공고를 보며 REST API, RESTful이라는 단어를 한번쯤은 들어봤을 것이다. 지금까지 나는 REST API를 제대로 이해하고 API를 설계해왔는가?라는 의문이 들어 제대로 복습할겸 REST API를 정리하게 됐다.

 

API(Application Programming Interface) 란?

영어 단어를 그대로 풀이하면, API는 프로그램들과 데이터베이스, 그리고 기능들의 상호 통신 방법을 규정하고 도와주는 매개체이다. 많은 곳에서 API를 매장-손님 사이의 '점원'으로 표현한다. 매장(데이터베이스)과 손님(애플리케이션/요청자) 사이에서 그들의 요청과 응답을 점원(API)이 처리한다고 볼 수 있다.

➡ 간단히 말해 API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체이다.

 

◼ API 종류

API 종류는 접근방식, 아키텍쳐 스타일에 따라 분류할 수 있다.

 

1) 접근방식에 따른 분류

  • Private API
    내부 API이다. 기업에서 자체 제품과 운영 개선을 위해 해당 단체 내부에서만 사용한다.
    따라서, 제3자에게 노출되지 않는다.
  • Public API
    개방형 API로 모두에게 공개된다. public API 중에서도 접속하는 대상에 대한 제약이 없는 경우를 OpenAPI라 한다.
  • Partner API
    특정 비즈니스 파트너 간에 공개된 API이다. 허용된 특정인들만 사용가능하다.

2)아키텍쳐 스타일에 따른 분류

SOAP API, RPC API, REST API, GraphQL 등이 있지만 현 시점에서는 REST API를 가장 많이 사용하고있다.

 

◼ API를 사용하는 이유는 무엇일까?

  • 확장성
    API를 통해 애플리케이션 확장에 용이하다. API를 사용하면 데이터와 애플리케이션, 외부 개발물을 연결하고 활용하여 협업을 수행하여 효율성을 높이도록 해준다.
  • 간편성
    개발에 있어 개발자간의 협업을 용이하게 해준다.

REST API란?

REST란?

REST는 REpresentational State Transfer의 약자로, 온라인 데이터 전송 방식 아키텍쳐 원칙 세트이다. 

클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는 GET, POST, PUT, DELETE 등의 함수 집합을 정의한다. 또한, REST는 HTTP 프로토콜을 활용하기 때문에 웹의 장점을 활용할 수 있다.

 

 REST의 구성요소

1. 자원(Resource/URI)

 

2. 행위(HTTP Method)

Method 역할
GET 리소스(URI) 조회
POST 리소스 생성
PUT 리소스 수정
DELETE 리소스 삭제

*POST 만 여러번 수행했을 때 결과가 달라진다.

 

3. 표현(Representations)

클라이언트가 서버에게 리소스에 대한 조작을 요청하면, 서버는 이에 대한 적절한 응답을 보낸다. 이때의 응답이 표현에 해당한다.

 

 REST의 설계 규칙

  • URI는 명사를 사용한다.(동사X)
  • URI는 소문자로만 구성한다.
  • 슬래시(/)로 계층 관계를 표현한다.
  • URI 마지막에는 슬래시를 붙이지 않는다.
  • 가독성이 떨어지는 경우 하이픈(-)을 사용한다.
  • 언더바(_)는 사용하지 않는다.

 

 REST의 특징

  • Client-Server 구조
    REST API에서 자원이 있는 쪽이 서버, 자원을 요청하는 쪽이 클라이언트에 해당한다. 서버는 API를 제공하고 비즈니스 로직 처리 및 저장을 책임지며, 클라이언트는 사용자 인증 등의 역할을 한다.
    이처럼 서버와 클라이언트의 역할이 구분됨으로써 서로 간의 의존성을 줄인다.
  • Stateless(무상태)
    HTTP 프로토콜은 기본적으로 무상태이다. REST는 HTTP를 기본으로 하기 때문에 이러한 특성을 따른다.
    서버는 클라이언트의 요청을 완전히 별개의 것으로 인식하고 처리하기 때문에 이전의 요청이 다음의 요청에 영향을 미치지 않는다. 결과적으로, 서버의 처리방식에 일관성을 부여하고 부담을 줄일 수 있다.
    *Stateless 무상태: 클라이언트의 상태(세션, 쿠키)를 서버에 저장하지 않음, 
  • Cacheable(캐시 가능)
    REST는 HTTP를 따르기 때문에 캐싱 기능을 적용할 수 있다. HTTP 표준에서 사용하는 Last-Modified Tag, E-Tag를 사용해 캐싱을 구현할 수 있으며 대량의 요청을 효율적으로 처리하기 위한 캐시를 사용할 수 있다.
    캐싱 기능을 통해 응답 시간 단축과 성능, 서버의 자원 이용률을 향상시킬 수 있다.
  • Uniform Interface(일관된 인터페이스)
    URI로 지정한 자원에 대한 조작을 통일되고 한정적으로 수행하는 아키텍처 스타일이다. 요청하는 클라이언트가 플랫폼과 언어, 기술에 무관하며 종속 받지 않는다. 이로 인해 느슨한 결합 형태를 가진다.
  • Self-Descriptiveness(자체 표현)
    요청 메시지(API 메시지) 만으로, API를 이해할 수 있는 구조이다. 리소스나 메서드를 이용해 무슨 행위를 하는지 직관적으로 이해할 수 있다.
  • Layered System(계층 구조)
    REST 서버는 다중 계층으로 구성될 수 있다. API 서버는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드 밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있다.

    하지만 클라이언트는 서버와 직접 통신하는지, 중간 서버와 통신하는지 알 수 없다.

 

◼ REST API란?

결과적으로, REST API는 REST를 기반으로 서비스 API를 구현한 것이다.
URI 형식으로 HTTP 메서드(GET, POST, PUT, DELETE)를 요청해 리소스(자원)를 조회, 생성, 수정, 삭제할 수 있는 것이 REST API이다.


RESTful이란?

◼ RESTful 이란?

RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
REST는 공식 표준이 없다. 때문에 REST 규칙과 원리를 따르는 시스템은 모두 RESTful 하다고 할 수 있다.

 

◼ RESTful 하지 못한 경우

GET, POST로만 CRUD 기능을 처리하는 경우는 RESTful 하지 못하다고 할 수 있다.

 

 

 

참고

Comments