오늘은 REST API에 대해서 알아보도록 하자.
REST API이란
'Roy Fielding'이라는 분이 2000년에 처음으로 발표한 것으로, REpresentational State Transfer의 줄임말이다.
A Web API(or Web Service) conforming to the REST architectural style is a REST API
REST 아키텍처 스타일을 따르는 웹 API(혹은 웹 서비스)가 REST API이다.
미리 보는 요약
HTTP URI를 통하여 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해서 해당 자원에 대한 CRUD Operation을 적용하는 것이다.
REST API의 필요성 및 장점
장점
- HTTP protocol을 사용하므로 별도의 구축이 불필요하다.
- HTTP protocol을 사용하는 모든 플랫폼에서 사용이 가능하다.
- Hypermedia API를 기본을 지키며 범용성을 보장한다.
- 클라이언트와 서버를 명확하게 분리한다.
단점
- 표준 자체가 존재하지 않는다.
- HTTP Method를 사용하므로 사용 가능한 메서드가 4가지밖에 없다.
- 구형 브라우저에서 호환이 되지않는다. (PUT, DELETE를 사용하지 못하며, PushState를 지원하지 않는다.)
그렇다면 REST 아키텍처 스타일이라는 것은 무엇일까? 우선 restfulapi.net에서 6가지를 이야기한다.
- Unifom Interface : 균일한 인터페이스
- Client -server : 클라이언트-서버
- Stateless : 무상태
- Cacheable : 캐싱가능한
- Layered system : 계층적 시스템
- Code on demand(optional) : 코드로 요청
자세히 보도록 하자.
Uniform Interface
구성요소의 인터페이스를 일반적인 원칙으로 적용시킴으로써 우리는 간단한 시스템 아키텍처와 시각적으로 향상된 상호작용을 할 수 있다.
요청이 어디서 오는지와 무관하게, 동일한 리소스에 대한 모든 API요청은 동일하게 보여야 한다. REST API는 사용자의 이름이나 이 메을 주소 등의 동일한 데이터 조각이 오직 하나의 URI(Uniform Resource Indentifier)에 속함을 보장해야 한다.
정형화된 REST 인터페이스는 아래 4가지 제약조건을 따른다.
- Identification of resources
- Manipulation of resources through representations
- Self-descriptive messages
- hypermedia as the engine of application state
Client-Server
REST API 디자인에서, 클라리언트 서버 애플리케이션은 서로 간에 완전히 독립적이어야 한다. 클라이언트 애플리케이션이 알아야 하는 유일한 정보는 요청된 리소스의 URI이고, 다른 방법으로 서버 애플리케이션과 상호작용할 수 없다.
클라이언트 서버 디자인 페턴은 분리해서 시행해야 한다. 그렇게 해야지 클라이언트와 서버 간에 구성요소가 독립적일 수 있다.
Stateless
클라이언트와 서버의 요청은 모든 필수적인 정보와 완벽한 요청이 반드시 포함되어야 하는 것을 의무화하고 있다.
서버는 이전의 context 정보를 서버에 저장하는 이점을 가지지 않는다. 즉 이전 세션에 대해 관련된 것은 따로 저장하지 않는다.
이러한 이유로 클라이언트, 애플리케이션은 반드시 모든 세션 상태를 유지해야 한다.
Cacheable
캐싱 가능 가능한 제약조건은 필요하다. 어떠한 응답에 대해서 캐싱 가능한지 혹은 캐싱이 불가능한지 암묵적으로 혹은 명시적으로 알려야 한다.
가급적이면, 리소스를 클라이언트 또는 서버 측에서 캐싱할 수 있어야 한다.
Layered System
계층적 시스템의 스타일은 아키텍처의 구성요소들의 행동을 제약하며 계층적으로 구성된다.
REST API에서 호출과 응답이 서로 다른 계층을 통과하며 일반적으로, 클라이언트와 서버 애플리케이션이 서로 직접 연결된다고 가정하면 틀릴 수 있다.
REST API는 엔드 애플리케이션 또는 중개자와 통신하는 여부를 클라이언트나 서버가 알 수 없도록 설계되어야 한다.
Code on demand
REST API는 일반적으로 정적 리소스를 전송하지만, 특정한 경우에 응답 실행코드를 포함할 수 있다. 단 코드는 요청 시에만 실행되어야 한다.
'Study > 기타' 카테고리의 다른 글
Clean Architecture 클린아키텍처, Flutter 폴더구조에 대하여[3부] (0) | 2024.02.25 |
---|---|
Clean Architecture 클린아키텍처, Domain에 대하여 [2부] (0) | 2024.01.09 |
Clean Architecture 클린아키텍처에 대하여 [1부] (0) | 2024.01.08 |
2. Reactive Programming (0) | 2022.01.18 |
1. Asynchronous 비동기 (0) | 2021.11.25 |