⌨️ RESTful 이란?
RESTful에 대한 언급을 하려면 REST 먼저 하나씩 이해해 나가야한다. 결국 REST 하게 란 말이 RESTful 이기 때문이다
1. REST(Representational State Tranfer)
월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식
1.1. REST 아키텍처에 적용되는 6가지 제한 조건
- 인터페이스 일관성
일관적인 인터페이스로 분리되어야 한다. - 무상태
각 요청간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 된다. - 캐시 처리 가능
WWW에서와 같이 클라이언트는 응답을 캐싱할 수 있어야 한다. - 계층화
클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는 지를 알 수 없다. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상 시키는 데 유용하다 - Code on demand (optional)
자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장 시킬 수 있다. - 클라이언트/서버 구조
아키텍처를 단순화시키고 작은 단위로 분리함으로써 클라이언트-서버의 각 파트가 독립적으로 개선될 수 있도록 해준다.
1.2. REST 인터페이스의 원칙에 대한 가이드
- 자원의 식별
요청 내에 기술된 개별 자원을 식별할 수 있어야 한다. ex) 웹 기반의 REST 시스템에서의 URI 사용 - 메시지를 통한 리소스의 조작
클라이언트가 어떤 자원을 지칭하는 메시지와 특정 메타데이터만 가지고 있다면, 이것으로 서버 상의 해당 자원을 변경/삭제할 수 있는 충분한 정보를 가지고 있는 것 - 자기서술적 메시지
각 메시지는 자신을 어떻게 처리해야 하는지에 대한 충분한 정보를 포함해야 한다.
예를 들어 MIME type과 같은 인터넷 미디어 타입을 전달한다면, 그 메세지에는 어떤 파서를 이용해야 하는지에 대한 정보도 포함해야 한다.
메세지를 이해하기 위해 내용까지 살펴봐야 한다면, 자기서술적인 메세지가 아니다 - 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어
클라이언트가 관련된 리소스에 접근하기를 원한다면, 리턴되는 지시자에서 구별될 수 있어야 한다.
ex) URI를 제공해주는 하이퍼텍스트의 링크
1.3. REST 의 주요한 목표
- 구성 요소 상호작용의 규모 확장성
- 인터페이스의 범용성
- 구성 요소의 독립적인 배포
- 중간적 구성요소를 이용해 응답 지연 감소, 보안을 강화, 레거시 시스템을 인캡슐레이션
2. REST API
- API
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환 가능 하도록 하는 것 - REST API의 정의
REST 기반으로 API를 구현한 것
2.1. REST API의 설계 기본 규칙
- URI는 자원의 정보를 표시해야 한다. ( REST 원칙의 자기서술적 메세지)
- 자원은 동사보다는 명사를, 대문자보다는 소문자를 사용
- 자원은 도큐먼트 이름으로는 단수 명사를 사용
- 자원의 컬렉션 이름으로는 복수 명사를 사용
- 자원의 스토어 이름으로는 복수 명사를 사용 - 자원에 대한 행위는 HTTP Method 로 표현
- URI에 HTTP Method 포함 x
GET /products/delete/1 -> DELETE /members/1
- URI에 행위에 대한 동사 표현이 들어가면 안된다(CRUD 기능을 유추 할 수 있는 것은 URI에 사용 x)
GET /products/read/1 -> GET/products/1
GET /products/insert/1 -> POST /products/1
- 경로 부분 중 변하는 부분은 유일한 값으로 대체한다
2.2. REST API의 설계 규칙
1. 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.
2. URI 마지막 문자로 슬래시를 포함하지 않는다.
3. 하이픈(-)은 URI 가독성을 높이는데 사용
4. 밑줄(_)은 사용하지 않는다.
5. URI 경로에는 소문자가 적합
6.파일 확장자는 URI에 포함하지 않는다.
3. RESTful ??
- 위의 REST를 가지고 REST API를 설계하고 그 REST API를 제공하는 웹 서비스를 결국 RESTful 하다라고 말할 수 있다
- RESTful은 어떠한 공식적인 정의나 방식이 아니고 REST를 REST 답게 쓰기 위해 표현하는 방식
beauti -> beautiful 느낌으로 받아들이면 쉽게 와닿을 듯
🌟REFERENCE
REST Wiki : https://ko.wikipedia.org/wiki/REST