REST, RESTful, REST API
by 볼빵빵오춘기REST
네트워크 리소스를 정의하고 처리하는 방법을 설명하는 일련의 원칙을 기반으로 하는 아키텍처 스타일이다.
REST의 원칙은 HTTP를 잘 활용하기 위한 원칙이다.
REST 주요 원칙
자원 기반 (Resource-based)
- 리소스(Resource)
- REST에서 모든 것은 리소스이다.
- 리소스는 URI(Uniform Resource Identifier)로 고유하게 식별된다.
- URI 설계
- URI는 리소스를 식별하는 데 사용되며, 명확하고 직관적으로 설계된다.
- URI에는 동사를 사용하지 않으며, 대신 명사형을 사용한다.
ex)
/students : 모든 학생 목록
/students/1 : ID가 1인 특정 학생의 정보
/courses : 모든 강좌 목록
/courses/front : 프론트엔드 강좌 정보
표현(Representation)
- 리소스는 여러 형식으로 표현될 수 있습니다. 일반적으로 JSON, XML, HTML 등으로 표현된다.
- 클라이언트는 서버에 요청 시 원하는 리소스의 표현 형식을 지정할 수 있다.
{
"id": 1,
"title": "front",
"body": "..."
}
무상태성(Statelessness)
- 각 요청은 독립적이며, 서버는 이전 요청의 상태를 저장하지 않는다.
- 요청 간의 세션 상태를 저장하지 않기 때문에, 각 요청에는 필요한 모든 정보(인증 정보 등)가 포함되어야 한다.
ex) 요청 헤더에 인증 토큰 포함: Authorization: Bearer <token>
HTTP 메서드 활용
- REST는 HTTP 프로토콜을 적극적으로 활용한다.
- HTTP 메서드(get, post, put, patch, delete)를 사용하여 CRUD(Create, Read, Update, Delete) 작업을 수행한다.
ex)
GET /students: 모든 학생 목록 조회
POST /students: 새로운 학생 생성
PUT /students/1: ID가 1인 학생 정보 전체 업데이트
PATCH /students/1: ID가 1인 학생 정보 부분 업데이트
DELETE /students/1: ID가 1인 학생 삭제
계층화 시스템(Layered System)
클라이언트는 중간 서버(프록시, 게이트웨이 등)를 통해 리소스에 접근할 수 있다. (⇒ 로드 밸런싱, 캐싱, 보안 등을 향상)
캐시 가능(Cacheable)
- HTTP 프로토콜의 캐싱 기능을 활용하여, 응답 데이터를 클라이언트 또는 중간 서버에 캐싱할 수 있다. (⇒ 성능을 향상시키고 서버 부하를 줄여줌)
- 응답 헤더에 캐시 관련 정보를 포함하여, 클라이언트가 응답을 캐시할 수 있도록 한다.
ex) Cache-Control: max-age=3600 (1시간 동안 캐시)
HATEOAS (Hypermedia As The Engine Of Application State)
클라이언트는 리소스와 상호작용하는 데 필요한 정보를 하이퍼미디어 형식으로 제공한다.
RESTful
REST의 원칙을 준수 했을 때, 준수해서 만들어진 시스템을 RESTful하다 라고 한다.
즉, RESTful = REST의 원칙을 준수했다!
RESTful 장점
일관성
- 자원 기반 설계
모든 리소스가 URI를 통해 일관되게 식별되기 때문에, API의 사용이 직관적이고 예측 가능하다.
ex) /users, /users/1, /users/1/orders 등 - HTTP 메서드의 명확한 의미
GET, POST, PUT, PATCH, DELETE와 같은 HTTP 메서드는 각기 고유한 의미를 갖고 있어, 작동 방식을 쉽게 이해할 수 있다.
확장성
- 무상태성 (Statelessness)
서버는 각 요청을 독립적으로 처리하므로, 서버를 쉽게 확장할 수 있다.
상태 정보를 유지하지 않기 때문에, 어떤 서버에서 요청을 처리하더라도 문제가 없다.
ex) 클라이언트가 인증 정보를 매 요청마다 포함하므로, 요청을 여러 서버로 분산해도 동일하게 처리된다. - 캐시 가능 (Cacheable)
응답을 캐시할 수 있는 기능을 활용하여, 서버 부하를 줄이고 성능을 향상시킬 수 있다.
ex) 정적 리소스나 자주 변경되지 않는 데이터를 캐시하여, 반복되는 요청에 대해 빠르게 응답할 수 있다. - 계층화 시스템 (Layered System)
클라이언트와 서버 사이에 추가적인 계층(프록시, 로드 밸런서 등)을 두어 시스템의 확장성과 보안을 향상시킬 수 있다.
ex) 로드 밸런서를 사용하여 여러 서버에 요청을 분산시키거나, 프록시 서버를 사용하여 보안을 강화할 수 있다.
명확한 상호작용
- 자체 설명 메시지 (Self-descriptive Messages)
요청과 응답 메시지는 필요한 모든 정보를 포함하고 있어, 클라이언트가 서버의 동작 방식을 이해하기 쉽다.
ex) 요청 헤더에 Content-Type, Authorization 등을 명시하여, 요청의 목적과 필요한 권한을 명확히 알 수 있다. - HATEOAS (Hypermedia As The Engine Of Application State)
응답에 다음 가능한 액션에 대한 링크를 포함하여, 클라이언트가 가능한 액션을 쉽게 이해하고 수행할 수 있다.
ex) 사용자 정보 응답에 포함된 "self", "orders" 링크를 통해, 클라이언트는 사용자의 주문 정보를 조회할 수 있는 URL을 알 수 있다.
REST API (RESTful API)
REST API는 REST 아키텍처 스타일을 준수하여 설계된 API(응용 프로그램 인터페이스)입니다. REST API는 RESTful 웹 서비스를 구현하는 데 사용되며, 클라이언트와 서버 간의 상호작용을 정의한다.
REST API의 주요 요소
- 엔드포인트(Endpoint)
REST API는 URI 엔드포인트를 통해 접근할 수 있다. - HTTP 메서드
API는 HTTP 메서드를 사용하여 요청을 처리한다. - 요청 및 응답(Request and Response)
클라이언트는 서버에 요청을 보내고, 서버는 요청에 대한 응답을 보낸다.
응답은 일반적으로 JSON 형식으로 제공한다.
정리
- REST: 웹 서비스의 설계 원칙 및 아키텍처 스타일이다.
- RESTful : REST 원칙을 따르는 웹 서비스이다.
- RESTful 서비스는 자원을 URI로 일관되게 식별하고, HTTP 메서드를 활용해 명확한 의미를 부여하며, 무상태성을 유지하여 서버 확장을 용이하게 한다.
- 또한, 캐시를 통한 성능 향상, 계층화된 시스템 구조, 자체 설명 메시지, 그리고 HATEOAS를 통해 클라이언트와 서버 간의 상호작용을 명확하고 직관적으로 만들어준다.
- 위의 특징들은 RESTful 서비스가 일관되고 확장 가능하며 명확한 상호작용을 제공하는 이유이다.
- REST API: RESTful 웹 서비스를 구현하는 API이다.
참고링크
https://www.youtube.com/watch?v=NODVCBmyaXs&t=281s
https://ko.wikipedia.org/wiki/REST
https://www.youtube.com/watch?v=fB3MB8TXNXM
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
'👩🏻💻 About 프로그래밍 > ect' 카테고리의 다른 글
OAuth2.0 소셜 로그인 (0) | 2024.08.13 |
---|---|
인터페이스, UI, API (0) | 2024.07.22 |
HTTP 메서드 - POST, PUT, GET, PATCH, DELETE (0) | 2024.07.20 |
@RestController vs @Controller (2) | 2024.07.15 |
어노테이션 역할과 사용 용도 (0) | 2024.07.15 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기