REST API 란?
- REST란 Representaitional State Transfer 의 약자로서, 하나의 소프트웨어 프로그램 개발 아키텍쳐 형식입니다. 이때 우리가 유의 깊게 살펴봐야 하는 것이 Representaitional 과 State 입니다. 만약 우리가 사람이라는 정보를 확인하고 싶어서 이를 URI로 검색을 할려고 합니다. 그럼 해당 상황에서 우리가 어떻게 URI를 입력해서 확인하면 될까요? 가장 먼저 사람은 생명으로 분류가 되겠죠 그럼 ‘/생명’ 을 적었습니다. 그럼 우리는 생명이라는 모든 종에서 사람이 포유류로 분류가 되기에 다시 ‘/생명/포유류’ 라고 적었습니다. 마지막으로 저희는 사람을 검색을 해야합니다. 그럼 마지막으로 ‘/생명/포유류/사람’ 이라고 검색을 하게 됩니다. 그럼 이러한 일련의 상황에서 우리는 분류를 하는 과정에서 대표가 되는 키워드를 URI로 조합해서 검색을 하게 됩니다. 이런 대표가 되는 것이 Representaitional을 뜻하게 됩니다. 자 그럼 우리가 이러한 대표가 되는 키워드를 조합하여서 URI를 만들어 냈어요. 그럼 우리가 해야 할 것이 무엇이 있을까요? 우리가 어떠한 행동을 취할 것인지를 명명을 해야겠죠. 우리는 사람의 정보를 검색, 삭제, 수정 등등을 할 수가 있겠죠. 즉 행동을 의미를 하는 겁니다. 우리가 어떠한 행동을 하는 것을 State라고 생각을 하시면 됩니다.
- 이제 개발적으로 접근을 해봅시다. REST API는 개발자가 정의한 CRUD(Create Read Upload Delete) 를 HTTP를 통해서 실행시키는 하나의 API를 뜻합니다. HTTP 를 이용하여 개발자가 정의한 URI를 통해 자원을 정의하고, HTTP METHOD(Get, Post, Put, Patch, Delete..)를 통해 State를 결정하고 데이터를 주고 받습니다.
- 즉 REST는 HTTP URI를 계승한 네트워크 아키텍쳐 입니다.
REST 개발 목적
- 구성요소 상호작용의 규모 확장성
- 인터페이스의 범용성
- 구성요소의 독립적인 배포
- 중간적 구성요소를 이용한 응답 지연 감소, 보안 강화, 레거시 시스템 캡슐화
REST API의 제약 조건
Client - Server (클라이언트 - 서버 형태)
- 클라이언트 서버 형태의 원칙은 관심사의 명확한 분리를 말하며, 이를 지킴으로써 서버와 클라이언트의 역할을 분명히 함과 동시에 서버의 구성요소가 단순화되고 확장성이 향상되어, 여러 플랫폼을 지원할 수 있게 된다.
Stateless (무상태성)
- 무상태성 원칙은 서버에 클라이언트의 상태 정보를 일절 저장하지 않음을 이야기 한다. 서버는 단순히 들어오는 요청만을 처리하여 구현을 단순화 하되, 클라이언트의 모든 요청은 서버가 요청을 알아듣는 데 필요한 모든 정보를 알고 있어야 한다. 이를 테면, 어떤 메소드를 요청했는지, 여기에 필요한 정보는 무엇인지 등을 이야기 한다.
Cache (캐시 기능)
- 캐시 기능은 클라이언트의 요청을 캐싱한다는 이야기이다. HTTP의 기능 중 캐시 기능을 적용한 것이다.
Uniform Interface (인터페이스 일관성)
- 인터페이스 일관성 원칙은 URI를 가능한 지정된 리소스에 균일하고, 통일된 인터페이스를 제공해야 하는 원칙으로 아케텍처를 단순하게 분리하여 확장이 쉽도록 구현해야 한다는 원칙이다. 대표적으로는 각 Entity 별로 자원을 식별하는 방법, 혹은 HATEOAS를 이용하는 방법을 이야기 한다. HATEOAS란, 클라이언트에 응답하는 형식을 단순히 결과 데이터만 제공해주는 것이 아닌 URI를 함께 제공해야 한다는 원칙을 말한다.
Layered System (계층화 시스템)
- 계층화 시스템 원칙은 애플리케이션 서버가 중계 서버(Proxy, Gateway)나 로드 밸런싱, 공유 캐시 등을 이용하여 확장성 있는 시스템을 구현해야 한다는 원칙이다.