REST(Representational State Transfer): 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개된 용어로 "웹에 존재하는 모든 자원(이미지, 동영상, DB 자원)에 고유한 URI를 부여해 활용"하는 것으로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 의미합니다.
Application Programming Interface의 약자로 서비스나 프로그램 간에 미리 정해진 기능을 실행할 수 있도록하는 규약으로 운영체제 API, 프로그램 API, 웹 API 등이 있습니다.
구성 요소 상호작용의 규모 확장성(scalability of component interactions)
인터페이스의 범용성 (Generality of interfaces)
구성 요소의 독립적인 배포(Independent deployment of components)
중간적 구성요소를 이용해 응답 지연 감소, 보안을 강화, 레거시 시스템을 인캡슐
레이션 (Intermediary components to reduce latency, enforce security and encapsulate legacy systems)
클라이언트/서버 구조
자원을 보관하는 곳: 서버 vs 자원을 요청하는 곳: 클라이언트
서버와 클라이언트는 일관적인 인터페이스로 분리되어야 합니다.
무상태(Stateless)
각 요청 간 클라이언트의 컨텍스트를 서버에 저장하지 않아야 합니다. API서버는 들어오는 요청만 메시지로 처리하면 되는데 이의 장점은 세션과 같은 컨텍스트 정보를 신경쓰지 않아도 되어 구현이 단순해진다는 점입니다.
캐시 처리 가능(Cacheable)
HTTP 프로토콜을 사용하므로, 웹에서 사용하는 기존의 기능을 사용할수 있어 캐싱이 가능하다. 캐시를 잘 사용하게 되면 네트워크 응답시간 뿐 아니라 REST 서버 트랜잭션이 발생하지 않아 전체적인 응답시간, 성능, 서버의 자원 이용률까지 향상시킬 수 있습니다.
계층화(Layered System)
클라이언트는 REST API 서버만 호출할 수 있고 REST 서버는 다중 계층으로 구성될 수 있어 보안, 로드 밸런싱, 암호화, 사용자 인증 등을 추가해 구조를 유연하게 만들 수 있습니다. 또한 게이트웨이나 PROXY 같은 네트워크 기반의 중간 매체를 사용할 수도 있습니다.
자체 표현 구조(Self-descriptiveness)
REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조를 갖는다는 것입니다.
인터페이스 일관성(Uniform Interface)
REST는 HTTP 표준에만 따른 다면, 특정 언어나 기술에 종속되지 않고 모든 플랫폼에서 사용할 수 있습니다.
REST 특징을 잘 지켜 설계된 API를 의미합니다.
HTTP 통신에서 어떤 자원에 대한 CRUD(Create, Read, Update, Delete) 요청을 Resource와 Method로 표현하여 특정한 형태로 전달할지 정해주는 가이드라인이라고도 할 수 있겠습니다.
참고사이트
brainbackdoor.tistory.com/53
ko.wikipedia.org/wiki/REST
https://velog.io/@somfist/REST%EB%9E%80-REST-API-RESTful-API%EC%B0%A8%EC%9D%B4%EC%A0%90
https://bcho.tistory.com/953