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를 어떻게 사용해야 하는지 설명한다.
  1. 클라이언트가 서버에 요청을 전송한다. 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정한다.
  2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인한다.
  3. 서버가 요청을 수신하고 내부적으로 처리한다.
  4. 서버가 클라이언트에 응답을 반환한다. 응답에는 요청이 성공했는지 여부와 클라이언트에게 알려주는 정보가 포함된다.

 

728x90