Skip to content

Latest commit

 

History

History
118 lines (87 loc) · 4.53 KB

이소민.md

File metadata and controls

118 lines (87 loc) · 4.53 KB

0. REST (REpresentational State Transfer)

  • HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍쳐
  • REST 기본 원칙을 성실히 지킨 서비스 디자인을 RESTful 이라고 표현

0-1. REST의 주요 목표

  • 구성 요소 상호작용의 규모 확장성
    • 클라이언트와 서버 간의 느슨한 결합을 유지하고 서버의 부하 분산, 확장성, 가용성을 향상시키는 방법 제공
  • 인터페이스의 범용성
    • HTTP와 같은 기존 웹 표준을 기반으로 하며, 일반적으로 사용되는 HTTP메서드와 URI를 활용하여 리소스 식별 및 조작 가능
  • 구성요소의 독립적인 배포
    • 클라이언트와 서버간의 역할을 명확하게 분리하여 독립적으로 배포될 수 있는 구성 요소를 지향
    • 시스템의 확장성과 유연성을 높이며 각 구성요소의 변경이 다른 구성 요소에 영향을 미치지 않도록 함
  • 중간적 구성요소를 이용해 응답 지연 감소, 보안을 강화, 레거시 시스템을 인캡큘레이션
    • 중간적 구성요소는 캐싱, 로드 밸런싱, 인증, 암호화 등의 기능을 수행하며 클라이언트와 서버 사이에서 중개자 역할을 수행

1. REST API

  • REST API는 REST를 기반으로 서비스 API를 구현한 것

1-1. REST API의 구성

  • 자원, 행위, 표현의 3가지 요소로 구성
  • REST는 자체 표현 구조로 구성되어 REST API만으로 HTTP 요청 내용을 이해할 수 있음

자체 표현 구조(Self-descriptiveness)

  • API 메시지 자체만 보고도 API를 이해할 수 있는 것.
  • 리소스와 메서드를 이용해서 어떤 메서드에 무슨 행위를 하는지를 알 수 있음.
  • 메시지 포맷 역시 JSON을 이용해서 직관적으로 이해가 가능한 구조.

구성요소 내용 표현방법
자원 자원 URI (엔드포인트)
행위 자원에 대한 행위 HTTP 요청 메서드
표현 자원에 대한 행위의 구체적 내용 페이로드

1-2. REST API 설계원칙

1-2-1. URI는 리소스를 표현, 리소스 식별을 위한 이름은 명사를 사용

//bad ; 동사 사용
GET /getTodos/1
GET /todos/show/1

// good ; 명사 사용
GET /todos/1

1-2-2. 리소스에 대한 행위는 HTTP 요청 메서드로 표현

  • HTTP 요청 메서드는 클라이언트가 서버에게 요청의 종류와 목적을 알리는 방법
  • 리소스에 대한 행위는 URI에 표현하지 않고, HTTP메서드를 통해 표현
// bad ; HTTP 요청 메서드는 GET, URI에 delete 표현 
GET /todos/delete/1

// good ; HTTP 요청 메서드에 delete 행위 표현
DELETE /todos/1

1-3. 페이로드의 MIME 타입

  • MIME 타입은 페이로드의 유형을 식별하기 위해 사용되는 미디어 타입을 지정
  • 페이로드가 필요없는 GET, DELETE 메서드를 제외한 POST, PUT, PATCH 요청 시
    setRequestHeader 메서드를 사용하여 요청 몸체에 담아 서버로 전송할 페이로드의 MIME타입 지정
  • 보통 타입/서브타입 의 형식을 가지며, 페이로드가 어떤 종류의 데이터인지 명시

1-3-1. 타입 예시

- text/plain: 일반 텍스트 데이터
- text/html: HTML 문서
- image/jpeg: JPEG 이미지 파일
- image/png: PNG 이미지 파일
- audio/mp3: MP3 오디오 파일
- video/mp4: MP4 비디오 파일
- application/json: JSON 데이터

1-3-2. 예시 코드

// XMLHttpRequest 객체 할당
const xhr = new XMLHttpRequest();

xhr.open('POST','/todos');

// XHR 객체의 setRequestHeader 메서드를 호출하여 content-type 요청 헤더를 설정. 서버에게 전송되는 데이터의 유형이 JSON 형식이므로 다음과 같이 설정
xhr.setRequestHeader('content-type', 'application/json');

// XHR 객체의 send 메서드 호출하여 실제 데이터를 서버로 전송
// 이 때 JSON.stringify를 사용하여 자바스크립트 객체를 JSON문자열로 변환한 후 해당 문자열을 전송
xhr.send(JSON.stringify({id:4, content: 'Angular', completed: false}));

xhr.onload=()=>{
    // XHR 객체의 onload 이벤트 정의, 
    // 요청이 성공적으로 완료된 경우 발생
}

참고자료

자바스크립트 딥다이브
위키백과 REST - https://ko.wikipedia.org/wiki/REST
MDN REST - https://developer.mozilla.org/ko/docs/Glossary/REST
MDN MIME - https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types