REST(Representational State Transfer) 는 자원의 표현을 이용하여 상태를 주고받는 것을 의미한다.
여기서 자원이란 소프트웨어가 관리하는 모든 것을 의미하며 자원의 표현은 자원을 나타내기 위한 이름을 의미한다.
가령, 서버가 관리하는 주문 데이터는 order
라고 표현할 수 있다.
최근에는 일반적으로 자원의 상태를 나타내기 위해 JSON 포맷을 사용한다.
REST는 네트워크 상에서 클라이언트와 서버의 통신 방식 중 하나이며, HTTP 프로토콜을 사용한다.
구체적으로는 HTTP URI를 활용하여 자원을 명시하고 HTTP METHOD를 통해 CRUD 연산을 적용하는 것을 의미한다.
API(Application Programming Inteface) 란 컴퓨터 프로그램 간 정보를 주고받을 수 있도록 하는 일종의 출입구와 같은 역할을 수행한다.
API가 REST 기반으로 구현되어 있다면, 이를 REST API
라고 부른다.
REST는 서버와 클라이언트의 역할을 명확하게 분리해 주며, HTTP 프로토콜을 따르는 모든 플랫폼에서 사용할 수 있다.
또한, CURL, Postman을 사용하여 간단하게 테스트할 수 있다는 장점도 존재한다. 반면, 요청 및 응답 스타일의 통신만 지원한다.
그리고, HTTP 메서드로 행위를 표현하기 어려운 경우도 존재하며 요청 한 번으로 여러 자원을 가져오기 어렵다는 단점이 존재한다.
그리고 REST 방식의 경우 자원의 상태를 전송하기 위해서 JSON 메시지 포맷을 사용한다.
JSON과 같은 텍스트 포맷은 자기 서술적이며, 메시지 소비자가 자신이 관심이 있는 값만 골라서 사용하고
나머지는 무시하면 되므로 메시지 구조가 자주 바뀌어도 하위 호환성을 보장하는 것이 유리하다.
하지만, 메시지가 다소 길다는 것이 단점이다.
메시지가 길다면 네트워크 트래픽을 더욱 사용하며 전송 속도가 느릴 수 있으며,
메시지를 해석하는 데에 오버헤드가 발생할 수 있다.