Team
[CS스터디] REST
seungh2
2023. 4. 15. 17:49
REST
- Representational State Transfer
- 웹 서비스를 구현하는 아키텍처 스타일 중 하나
- 클라이언트와 서버 사이의 통신 방식을 규정한다.
- HTTP 프로토콜을 기반으로 하며, 간단하고 확장성이 높은 아키텍처로 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 제공한다.
- 아파치 HTTP 서버 프로젝트의 공동 설립자인 로이 필딩의 2000년 논문에서 처음 소개되었다. 발표 당시 웹이 HTTP의 설계 상 우수성을 제대로 사용하지 못하고 있어 웹의 장점을 최대한 활용할 수 있는 아키텍처로 REST를 소개했다.
- HTTP 프로토콜을 의도에 맞게 디자인하도록 유도하고 있다.
- HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것
- 자원 기반의 구조(ROA, Resource Oriented Architecture) 설계의 중심에 Resource가 있고 HTTP Method를 통해 Resource를 처리하도록 설계된 아키텍처
REST 아키텍처의 제한 조건
인터페이스 일관성
- 인터페이스는 일관되게 설계되어야 하며, 리소스에 대한 식별자, 메시지 전송을 위한 표준 HTTP 메소드(GET, POST, PUT, DELETE 등)을 사용해야 한다.
- 일관적인 인터페이스로 분리되어야 한다.
Stateless
- 서버는 클라이언트의 상태를 유지하지 않아야 한다. 따라서 클라이언트의 각 요청은 모든 정보를 포함하고 있어야 한다.
Cacheability
- 클라이언트는 응답을 캐싱할 수 있어야 하며, 서버는 응답에 대한 캐시 제어 정책을 정의해야 한다.
- 잘 관리되는 캐싱은 클라이언트-서버 간 상호작용을 부분적으로 또는 완전히 제거해 scalability와 성능을 향상시킨다.
Layered System
- 클라이언트는 서버에 직접 연결되지 않고 중간 계층(로드 밸런서, 캐시 등)을 통해 연결되어야 한다.
Client/Server 구조
- 클라이언트와 서버가 독립적으로 개발되어야 하고 서로 간의 인터페이스가 잘 정의되어야 한다.
✨다양한 클라이언트와 서버 간의 상호 운용성과 확장성을 보장할 수 있다.
REST 인터페이스의 원칙
Resource Identification
- 모든 자원은 고유한 식별자를 가져야 한다.
Message Orientation
- 클라이언트는 자원에 대한 요청을 메시지로 보낸다.
Self-Descriptive
- 각 요청은 자신이 어떤 요청인지 명확히 해야 한다.
Hypermedia
- 하이퍼미디어를 통해 Application의 상태를 전이시켜야 한다.
REST의 주요 목표
- 분산 하이퍼미디어 시스템을 위한 아키텍쳐 스타일을 제공하는 것
- HTTP의 장점을 최대한 활용하면서도, 분산 시스템에서 발생하는 문제점을 최소화
Performance
- REST는 HTTP의 캐싱 기능과 분산 처리를 이용하여 성능을 개선할 수 있다.
Scalability
- REST는 분산 시스템에서 확장성을 보장하는 아키텍쳐를 제공
Simplicity
- REST는 HTTP의 기본 기능을 이용해 간결하게 설계할 수 있다.
Reliability
- REST는 HTTP의 상태 코드와 메시지를 이용해 신뢰성을 보장한다.
RESTful API
- REST의 기본 원칙을 성실히 지킨 API
API
- Application Programming Interface
- 다른 SW 시스템과 통신하기 위해 따라야 하는 규칙
- 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이라고 할 수 있다.
RESTful API 클라이언트 요청의 주요 구성요소
Resource
- 표현 방법 : URI
- URI는 정보의 자원을 표현해야 한다.
- 행위에 대한 표현은 들어가지 않아야 한다.
동사보다 명사를
/getCitys ❌ /citys ⭕
대문자보다 소문자를
/CITYS ❌ /citys ⭕
언더바 대신 하이픈을
/item_list ❌ /item-list ⭕
마지막에 슬래시 쓰지 않기
/item-list/ ❌ /item-list ⭕
Verb
- 표현 방법 : HTTP Method
- 자원에 대한 행위는 HTTP Method로 표현한다.
- GET, POST, PUT, DELETE
이름 | 설명 |
GET | 데이터를 읽거나 검색할 때에 사용되는 메소드 오직 데이터를 받기만 한다. |
POST | 새로운 리소스를 생성할 때 사용되는 메소드 |
PUT | 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용되는 메소드 |
DELETE | 특정 리소스를 삭제하는 메소드 |
Representations
표현 방법 : HTTP Header
클라이언트와 서버 간에 교환되는 메타데이터
RESTful API 서버 응답의 주요 구성요소
상태 표시줄
- 요청 성공 또는 실패를 알리는 3자리 상태 코드
메시지 본문
- 리소스 표현이 포함된다.
- 서버는 요청 헤더에 포함된 내용을 기반으로 적절한 표현 방식을 선택한다.
헤더
- 응답에 대한 헤더 또는 메타데이터도 포함된다.
RESTful API 작동 방법
- 클라이언트는 리소스가 필요할 때, API를 사용해 서버에 접속한다.
- API 개발자는 서버 애플리케이션 API 문서에서 REST API를 어떻게 사용해야 하는지 설명한다.
- 클라이언트가 서버에 요청을 전송한다. 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정한다.
- 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인한다.
- 서버가 요청을 수신하고 내부적으로 처리한다.
- 서버가 클라이언트에 응답을 반환한다. 응답에는 요청이 성공했는지 여부와 클라이언트에게 알려주는 정보가 포함된다.
728x90