REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식
REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
REST는 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다.
자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
즉, 자원의 표현에 의한 상태 전달
자원 : 해당 소프트웨어가 관리하는 모든 것
ex) 문서, 그림, 데이터, 해당 소프트웨어 자체 등
자원의 표현 : 그 자원을 표현하기 위한 이름
ex) DB의 학생 정보가 자원일 때, ‘students’를 자원의 표현으로 정한다.
개념을 간단히 표현하자면, HTTP URI를 통해서 자원을 명시하고 HTTP Method(POST, GET, PUT, DELETE
)를 통해서 명시된 자원의 CRUD(Create, Read, Update, Delete
)를 요청하는 API를 작성하는 것이라 할 수 있다.
REST 아키텍처는 다음과 같은 특성을 지켜야 한다.
인터페이스가 일관되어야 한다. URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행할 수 있어야 한다는 것이다. RESTful API라면 HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용이 가능하다.
API 호출한 클라이언트 상태에 대한 정보를 따로 서버에 저장하고 관리하지 않는다. 이에 따라 API 서버는 들어오는 요청에 대한 처리만 할 수 있어 서비스의 자유도가 높아지고 구현이 단순해지는 특징을 가지고 있다.
HTTP라는 기존의 웹 표준을 활용하기 때문에, 캐시 기능을 사용할 수 있다. 잘 관리되는 캐싱은 클라이언트-서버 간의 상호작용을 부분적으로 또는 완전히 제거하여 성능을 향상시킬 수 있다고 한다.
REST API 메세지만 보고도 쉽게 이해할 수 있는 구조로 표현되어야 한다. HTTP Method 명칭이 자체 표현 구조를 따르는 예시라고 할 수 있다.
Client와 Server의 역할이 확실히 구분되어야 하며, 서로간 의존성을 낮출 수 있어야 한다. 서버는 API를 제공하고 비즈니스 로직 처리 및 데이터 저장에 책임이 있으며, 클라이언트는 사용자 인증이나 상태정보를 직접 관리하는 것에 책임이 있다.
REST API 서버는 다중 계층으로 구성되어 있어야 한다. RESTful API 서버는 순수 비즈니스 로직을 수행하는 API 서버와 그 앞단에 사용자 인증, 암호화, 로드 밸런싱을 하는 계층을 추가해서 구조상의 유연성을 둘 수 있다.
여러 단어를 나열해야 하는 경우 카멜 표기법이 아닌 하이픈을 활용한 소문자로 URI를 만들어야 한다.
정확한 계층 관계를 표현할 수 있어야 하기 때문에, 마지막에 포함시키지 않도록 하여 혼란을 주지 않아야 한다.
리소스에 대한 행위는 HTTP Method를 통해서 충분히 전달이 가능하다. 명료한 URI 작성을 위해서 리소스에 대한 행위를 포함시키지 않도록 하라.
리소스 자료의 포맷을 URI 안에 포함시키지 않아야 한다. Request의 헤더에 Accept 속성을 통해서 파일의 형식을 지정해 줄 수 있다.
REST 하게 만든 API 를 RESTful API 라고 한다.
REST에서 말하는 모든 REST 아키텍처 스타일을 지켜야만 진정한 의미의 RESTful API 라고 말할 수 있다.
- Uniform Interface (인터페이스 일관성)
- Stateless (무상태성)
- Cacheable (캐시 처리 가능)
- Self-descriptiveness (자체 표현 구조)
- Client-Server 구조
- Layered System (계층형 구조)
REST API 설계 규칙
소문자 사용과 하이픈(-) 사용
슬래시(/) 로 계층 관계 표현, 마지막은 불포함
리소스에 대한 행위 불포함
파일 확장자 불포함
그러나 모든 API가 모든 요소를 엄격하게 준수할 필요는 없으며, 상황에 따라 유연하게 적용될 수 있다.
https://tedjunny.tistory.com/entry/RESTful한-API-설계하기
https://hahahoho5915.tistory.com/54