RESTful API에 대해 알아보기 전에 REST
가 무엇인지부터 알아보자.
REST(REpresentational State Transfer)
REST
는 웹과 같은 분산 하이퍼미디어 환경에서 자원의 존재, 상태 정보를 표준화된 HTTP 메서드로 주고받는 웹 아키텍처
이다.
즉, HTTP URI(Uniform Resource Identifier)
를 통해 자원을 명시하고 HTTP Method(POST, GET, PUT, DELETE)
를 통해 해당 자원에 대한 CRUD 연산
을 적용하는 것을 의미한다.
REST는 크게 리소스(자원)
, 메서드(처리)
, 메시지
의 3가지 요소로 구성된다.
만약 "닉네임이 수풀림인 사용자를 생성해라"라는 호출이 있을 때 리소스, 메서드, 메시지는 각각 아래와 같다.
리소스 = 사용자
메서드 = 생성한다
메시지 = 닉네임이 수풀림인 사용자
REST는 행위에 대한 메서드를 HTTP 메서드 중 CRUD에 해당하는 4가지 메서드만을 사용한다.
POST | Create | 생성 |
---|---|---|
GET | Read | 조회 |
PUT | Update | 수정 |
DELETE | Delete | 삭제 |
REST 6가지 원칙
1) Uniform Interface
구성요소(클라이언트, 서버 등) 사이의 인터페이스는 균일해야 한다.
따라서 HTTP 표준만 따른다면 특정 언어나 기술에 종속되지 않고 모든 플랫폼에 사용할 수 있으며 URI로 지정한 리소스에 대한 조작이 가능해진다.
또한, 전체 시스템 아키텍처가 단순해지고 상호작용의 가시성이 개선되며, 구현과 서비스가 분리되므로 독립적인 진화가 가능해진다.
Uniform Interface를 구현하기 위해서는 아래의 4가지 제약조건을 지켜야 한다.
1️⃣ Identification of resources - 인터페이스는 클라이언트와 서버 간의 상호 작용에 관련된 각 리소스를 고유하게 식별해야 한다.
2️⃣ Manipulation of resources through representation - 리소스는 서버 응답에 균일한 표현이 있어야 하고, API 소비자는 이 표현을 사용하여 서버의 리소스 상태를 수정해야 한다.
3️⃣ Self-descriptive messages - 각 리소스 표현은 메시지를 처리하는 방법을 설명하는 데 충분한 정보를 전달해야 한다. 또한 클라이언트가 리소스에 대해 수행할 수 있는 추가 작업에 대한 정보도 제공해야 한다.
4️⃣ Hypermedia as the engine of application state - 클라이언트는 응용 프로그램의 초기 URI만 가지고 있어야 한다. 클라이언트 애플리케이션은 하이퍼링크를 사용하여 다른 모든 리소스 및 상호 작용을 동적으로 구동해야 한다.
2) Stateless
클라이언트와 서버의 통신에는 상태가 없어야 한다.
즉, 작업을 위한 상태 정보를 따로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청을 단순히 처리하기만 하면 된다.
서버는 이전에 서버에 저장된 정보를 이용할 수 없기 때문에 클라이언트 응용 프로그램이 세션 상태를 완전히 유지해야 하고,
서버에서 불필요한 정보를 관리하지 않기 때문에 구현이 단순해진다.
3) Caching
모든 응답은 캐시 가능 또는 캐시 불가능으로 암시적으로 또는 명시적으로 레이블링 되어야 한다.
응답이 캐시 가능한 경우, 클라이언트 응용프로그램은 나중에 동일한 요청 및 지정된 기간에 대해 응답 데이터를 재사용할 수 있는 권한을 가지게 된다.
4) Client-Server
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분된다.
따라서 클라이언트와 서버는 독립적으로 구현되어야 하고 서로 간의 의존성은 축소된다.
5) Hierarchical system
REST는 계층으로 구성이 가능해야 하며, 각 레이어에 속한 구성요소는 인접하지 않은 레이어의 구성요소를 볼 수 없어야 한다.
6) Code on demand
REST는 애플릿
(다른 프로그램 내에서 실행되는 프로그램)이나 스크립트의 형태로 코드를 다운로드하고 실행함으로써 클라이언트 기능을 확장할 수 있게 한다.
다운로드한 코드는 사전에 구현해야 할 기능의 수를 줄임으로써 클라이언트를 단순화시킨다.
서버는 코드 형태로 클라이언트에 전달되는 기능의 일부를 제공할 수 있고 클라이언트는 코드를 실행하기만 하면 된다.
RESTful API
RESTful API
란 REST한 API, 즉 REST를 준수하는 API이다.
REST가 웹과 같은 분산 하이퍼미디어 환경에서 자원의 존재, 상태 정보를 표준화된 HTTP 메서드로 주고받는 웹 아키텍처라고 했으므로
RESTful API란 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스
라고 할 수 있다.
장점
1) 모든 유형의 데이터 형식 지원
다른 유형의 API에서는 데이터 형식 선택이 제한되지만 RESTful API는 모든 데이터 형식을 지원한다.
2) 웹 브라우저와 함께 작동
RESTful API에서는 HTTP 요청을 보내고 응답으로 JSON
(JavaScript Object Notification) 데이터를 가져온 다음, 해당 데이터를 구문 분석하여 클라이언트 응용 프로그램에서 사용할 수 있다.
따라서 웹 브라우저에 가장 적합하고 이러한 API를 기존 웹 사이트와 쉽게 통합할 수 있다.
3) 배우기 쉽고, 구현하기 쉽다
RESTful API는 통신을 위해 HTTP 메서드
를 사용한다.
우리는 대부분 GET, POST, PUT, DELETE와 같은 HTTP 메서드에 익숙하기 때문에 어렵지 않게 사용할 수 있다.
또한, REST는 클라이언트가 서버와 완전히 분리된 클라이언트-서버 아키텍처를 기반으로 하기 때문에
개발자는 클라이언트 측에서 코딩된 내용이나 서버 구성 방법에 대해 걱정할 필요가 없다.
4) 유연성
REST에서는 언제든지 데이터베이스의 데이터를 쉽게 업데이트할 수 있다.
데이터는 리소스나 방법에 얽매이지 않으므로 REST는 여러 유형의 호출(XML, JSON)을 처리하고, 다른 데이터 형식을 반환하며, 하이퍼미디어의 올바른 구현으로 구조적으로도 변경할 수 있다.
이러한 유연성을 통해 개발자는 다양한 고객의 요구사항을 충족하는 동시에 사용자의 요구사항을 충족하는 API를 구축할 수 있다.
References
JaeYeopHan/Interview_Question_for_Beginner
'CS > 개발상식' 카테고리의 다른 글
함수형 프로그래밍 (0) | 2022.09.16 |
---|---|
TDD(Test-Driven Development) (0) | 2022.09.15 |
객체 지향 프로그래밍의 설계원칙, SOLID (0) | 2022.09.07 |
오버로딩(Overloading) vs 오버라이딩(Overriding) (0) | 2022.09.07 |
객체 지향 프로그래밍(OOP, Object-Oriented Programming) (0) | 2022.09.05 |