의미
REpresentational State Transfer Application Programming Interface
- Representational: 표현형. 리소스가 JSON, XML처럼 특정 형식의 표현을 가지고 있다는 개념
- State Transfer: 상태 전달
- Stateless Protocol: REST가 상태를 관리하지 않고, 클라이언트와 서버 간의 통신이 상태를 전송하고 유지하지 않는다
- 이전 요청과 상태를 공유하지 않는다
- 서버는 클라이언트의 정보를 저장하지 않는다
- 그래서 클라이언트의 요청이 자체적인 상태 정보를 포함하고 있어야 한다. 서버에 필요한 모든 정보를 포함하여.
- 이는 시스템의 확장성과 견고성을 향싱시킨다. 서버의 부하를 분산하고, 클라이언트가 장애를 겪거나 재시작될 때 시스템의 일관성을 유지한다.
- Stateless Protocol: REST가 상태를 관리하지 않고, 클라이언트와 서버 간의 통신이 상태를 전송하고 유지하지 않는다
- Application Programming Interface: 응용 프로그램 간 상호 작용 수단. 프로그램끼리 데이터를 주고 받는 등의 작업을 할 수 있는 메커니즘을 의미한다.
- 우리가 하고자 하는 것은 이 '수단'을 사용하는 '방법'을 이해하는 것이다
목적
HTTP(Hypertext Transfer Protocol)는 원래 HTML(Hypertext Markup Language) 파일을 전송하는 프로토콜이었다. 그러나 이 HTTP(Protocol)을 이용해서 HTML 웹 문서 뿐만 아니라 함수처럼 리소스를 가져오기(API) 위해서 REST API가 탄생하였다. 함수처럼 호출해서 리소스를 가져오는 인터페이스(상호 작용 수단)인 것이다. 리소스는 JSON, XML 형식으로 반환한다. 1
구성
HTTP(Protocol)의 URI에 리소스를 표현하고, HTTP Method(GET, POST...)에 CRUD Operation을 표현한다. 서버의 특정 함수를 호출하지 않는다는 것이 다른 API와의 차이다.
CRUD Operation | HTTP Method |
Create (생성) | POST |
Read (조회) | GET |
Update (수정) | PUT |
Delete (삭제) | DELETE |
RESTful, REST 아키텍처 제약 조건
REST 아키텍처 제약 조건을 준수한다는 의미하는 비공식 용어다. 이러한 제약 조건이 시스템 아키텍처에 적용되면 성능, 확장성, 단순성, 수정 가능성, 가시성, 이식성 및 신뢰성과 같은 우수한 비기능적 특성을 얻을 수 있다.
- Client/Server (고객/서버) - 클라이언트는 명확하게 정의된 인터페이스로 서버와 분리된다.
- Stateless (무상태) - 특정 클라이언트가 "휴식 상태"일 때 서버 저장소를 사용하지 않는다.
- Cache (캐시) - 응답은 자체 캐시 가능성을 나타낸다.
- Uniform Interface (일관된 인터페이스)
- Layered System (계층화된 시스템) - 클라이언트는 일반적으로 끝 서버에 직접 연결되었는지 또는 중간자와 연결되었는지를 구분할 수 없다.
- Code on Demand (optional) (요청 시 코드 전송 - 선택 사항) - 서버는 표준 가상 머신 내에서 실행할 수 있는 로직을 클라이언트로 전송함으로써 클라이언트의 기능을 임시로 확장하거나 사용자 정의할 수 있다.
Uniform Interface (일관된 인터페이스)
이는 아키텍처를 단순화하고 결합을 해제하여 각 부분이 독립적으로 발전할 수 있도록 한다.
- 요청에서 리소스 식별 - 개별 리소스는 RESTful 웹 서비스에서 URI를 사용하여 요청에서 식별된다. 리소스 자체는 클라이언트에 반환되는 표현과 개념적으로 분리된다. 예를 들어, 서버는 데이터베이스에서 HTML, XML 또는 JSON으로 데이터를 보낼 수 있다. 이러한 형식은 모두 서버의 내부 표현이 아니다.
- 표현을 통한 리소스 조작 - 클라이언트가 리소스의 표현을 보유하면 해당 리소스의 상태를 수정하거나 삭제할 수 있다.
- 자체 기술 메시지 - 각 메시지는 메시지 처리 방법을 설명한다. 예를 들어, 미디어 유형으로 호출할 파서를 지정할 수 있다.
- 애플리케이션 상태의 하이퍼미디어 엔진 (HATEOAS) - REST 애플리케이션에 대한 초기 URI에 액세스한 후에는(웹 사용자가 웹 사이트의 홈페이지에 액세스하는 것과 유사하게), REST 클라이언트는 동적으로 서버에서 제공한 링크를 사용하여 필요한 모든 사용 가능한 리소스를 발견할 수 있어야 한다. 액세스가 진행됨에 따라 서버는 현재 사용 가능한 다른 리소스로의 하이퍼링크가 포함된 텍스트로 응답한다. 클라이언트가 서버의 구조에 대한 정보를 하드코딩할 필요가 없다.
그러나 일반적으로 RESTful 이라는 용어는 HTTP 기반 API의 설계와 HTTP 메서드에 관한 모범 사례에 관한 의미로 널리 사용된다.
활용
Micro Service Architecture를 구현할 때 사용한다. 클라이언트가 여러 개의 Server와 통신할 때 요청을 REST API로 한다.
Mircro Service Architecture는 기능을 하는 서버를 분산해서 대량 요청을 빠르게 처리하고, 일부 기능의 문제가 전체에 영향을 미치지 않게 하기 위해서 사용한다.
OPEN API(Interface) 도 REST API로 구현된 경우가 많다. OPEN API는 날씨 API처럼 누구나 사용 가능하도록 공개한 API를 의미한다
Naming Convention, Best Practice
REST API - Naming Convention, Best Practice
참고 자료
한 강의로 끝내는 컴퓨터공학: 네트워크, Dave Lee
https://aws.amazon.com/ko/what-is/restful-api/
https://en.wikipedia.org/wiki/REST
- HTML 웹 문서가 아니다. [본문으로]
'Computer Science' 카테고리의 다른 글
[Network][스크랩] Bearer Authentication 헤더 규칙이 정해진 배경 (0) | 2024.06.24 |
---|---|
Reactive Programming (0) | 2024.04.16 |
[Network] HTTP response status code (0) | 2024.04.06 |
[Network] REST API - Naming Convention, Best Practice (0) | 2024.04.06 |
[CS] 시스템 분석 설계 (0) | 2024.04.06 |