해당 포스팅은 위키북스의 모던 자바스크립트 Deep Dive라는 책을 독학하며 기록하는 글입니다.

REST는 2000년 Roy Fielding의 논문에서 처음 소개되었다. 당시 웹이 HTTP를 제대로 사용하지 못하고 있는 상황을 보고 HTTP의 장점을 최대한 활용할 수 있는 아키텍처로서 REST를 소개했고, 이는 HTTP 프로토콜을 의도에 맞게 디자인하도록 유도하고 있다. 여기서 REST의 기본 원칙을 성실히 지킨 서비스 디자인을 RESTful이라고 표현한다.

REST API의 구성

REST API는 자원, 행위, 표현의 3가지 요소로 구성되는게 여기서 각각은 다음을 의미한다.

  • 자원(resource) : 말그대로 자원을 가리키며 URI(엔트포인트)를 통해 표현된다.
  • 행위(verb) : 자원에 대한 행위를 가리키며 HTTP 요청 메서드를 통해 표현된다.
  • 표현(representations) : 자원에 대한 행위의 구체적 내용을 가리키며 페이로드를 통해 표현된다.

그럼 위 구성을 가지고 REST API를 설계하는 원칙을 살펴보자.

REST API 설계 원칙

REST에서 가장 중요한 원칙은 두 가지로 URI는 리소스를 표현하는데 집중하고 행위에 대한 정의는 HTTP 요청 메서드를 통해 하는 것이다.

  1. URI는 리소스를 표현하는데 집중한다는 것은 리소스를 식별할 수 있는 이름은 동사보다는 명사를 사용하는 것이 바람직하다는 것으로 이름에 'get'과 같은 행위에 대한 표현이 들어가서는 안된다는 말이다.
# 나쁜 예시
GET /getTodos/1

# 좋은 예시
GET /todos/1
  1. 행위에 대한 정의는 HTTP 요청 메서드를 통해 한다는 것은 HTTP 요청 메서드를 통해 클라이언트가 서버에게 요청의 종류와 목적을 알린다는 것으로 리소스에 대한 행위를 URI에 표현하지 않는 것을 말한다. HTTP 요청 메서드의 종류와 목적은 다음과 같다.
HTTP 요청 메서드종류목적페이로드
GETindex/retrieve모든/특정 리소스 취득X
POSTcreate리소스 생성O
PUTreplace리소스의 전체 교체O
PATCHmodify리소스의 일부 수정O
DELETEdelete모든/특정 리소스 삭제X

fetch 메서드를 사용한 REST API의 사용

fetch 메서드는 서버에 HTTP 요청을 보내고 응답을 받아올 수 있는 방법 중 하나로 비동기적으로 동작한다. 기본적인 사용법과 각 인수에 대한 설명은 다음과 같다.

// 기본적인 사용법
fetch(url[, option]);

인수로 받은 url는 정보를 요청하고자 하는 주소이며 선택적으로 option객체를 주어 요청하는 HTTP 메서드나 header의 내용, body의 내용을 바꿀 수 있다. option객체를 작성하는 법은 다음과 같다.

const option = {
  method: 'POST',
  headers: {
    // 변경하고자 하는 요청 헤더가 있으면 여기에 '키-값'형태로 기술
  },
  body: 
    // POST나 PUT과 같은 HTTP 메서드를 사용할 시 보내야 하는 데이터를 기술
    // 이때 꼭 직렬화를 해야한다.
}

만약 사용하고자 하는 HTTP 메서드가 GET이라면 option객체의 method가 기본젃으로 GET으로 설정되어 있기 때문에 따로 설정해주지 않아도 된다.

fetch 메서드를 사용하는 경우 반환값으로 프로미스 객체를 반환하고, 내용으로는 HTTP 요청에 대한 응답을 담고 있어 프로미스 객체가 제공하는 다양한 프로퍼티와 메서드를 통해 작업을 처리할 수 있다. 이에 대해서는 다음 장인 45장 프로미스에서 알아보자.

profile
I Will be Relaxed Person

0개의 댓글