Representational State Transfer + Application Programming Interface
자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것
Client-Server 구조 → 의존성 없어야 함
사용자 인터페이스와 데이터 스토리지의 분리
Stateless: 각 요청은 독립적, 서버에 상태 정보 유지 X→ DDoS와 같은 보안 이슈로 인해 인증절차 구축
Caching: 캐싱 기능을 적용 가능해야 함
Uniform Interface: 데이터가 표준 형식으로 전송될 수 있도록 구성요소 간 통합 인터페이스 사용
Layered System: 시스템이 계층 구조로 나뉘어야 함
보안
로드밸런싱 → 프록시
로드밸런싱 : H/W, 트래픽 부하 조절
프록시 : 경로 조절
로드밸런서가 부하에 따라 서버를 생성할 수도 종료할 수도 있다.
Self-descriptiveness: 전송되는 내용은 별도 문서 없이 쉽게 이해할 수 있어야 한다.
(Optional) Code-On-Demand
실행 가능 코드 형태로 기능 전송 가능
정적 document를 사용할 때나 사용했지, 지금은 잘 사용하지 않는다.
Resource
모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
Verbs: HTTP Method
Representations: HTTP Message Payload
보편적으로 JSON, XML을 사용
자원 식별
인터넷의 모든 것은 고유한 주소를 가져야 한다
표현을 통한 자원 조작
웹 페이지 정보 조작 시 특정 형식을 통해 CRUD등을 수행
자기 서술적 메시지
수신측에서 별도 설명 없이도 해당 메시지를 이해 및 처리 가능하도록 정의
e.g.
Content-Type: text/html
HATEOAS
Hypermedia As The Engine Of Application State
웹 페이지가 다른 페이지나 상태로 넘어갈 수 있는 링크 제공