REST(REpresentational State Transfer)란?

 

  • REST(REpresentational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다. 로이 필딩(Roy Fielding)은 HTTP를 목적에 맞게 그리고 보다 실용적이게 사용하기 위해 REST 아키텍쳐를 정의하였습니다.



CRUD Operation이란?

 

  • CRUD는 대부분의 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create, Read, Update, Delete를 일컫는 말입니다.




CRUD Operation과 HTTP Method

 

CRUD HTTP Method
Create POST
Read GET
Update PUT, PATCH
DELETE DELETE

 

  • CRUD Operation과 HTTP Method를 맵핑하면 위와 같은 표로 구성됩니다.




REST 구성 요소

 

1. 자원(Resource) : HTTP URI

 

2. 자원에 대한 행위(Verb) : HTTP Method

 

3. 자원에 대한 행위의 내용(Representations) : HTTP Message Payload




REST 특징

 

1. Server-Client 구조

 

  • REST API를 이용하여 서로간의 의존성을 줄인 독립적인 Server, Client 구조를 가집니다.




2. Stateless

 

  • HTTP 프로토콜을 기반으로 하기 때문에 서버가 클라이언트의 상태를 보존하거나 기억하지 않습니다.




3. Cacheable

 

  • HTTP 프로토콜을 그대로 사용하기 때문에 HTTP의 기능인 캐싱 기능을 사용할 수 있습니다. 




4. Uniform Interface

 

  • identification of resources(자원에 대한 식별) :
    URI를 통해 자원을 식별할 수 있어야 합니다.

 

  • manipulation of resources through representations(표현을 통한 자원에 대한 조작) :
    표현된 자원에 대해서 조작할 수 있어야 합니다.

 

  • self-descriptive messages(자기 서술적 메시지) :
    자기 서술적 메시지로서 요청, 응답 메시지만을 가지고 해석할 수 있어야 합니다. 이러한 해석을 만족하려면 Host 헤더에 Host 이름 또는 IP를 기재해야 하고, Media Type을 정확하게 표기해야 합니다.

    HTML은 각 태그마다 목적이 명확하게 명세화가 되어 있어 self-descriptive message를 만족하지만, json 같은 경우에는 파싱에 대한 규칙만 정해져 있기 때문에 application/json 만으로는 self-descriptive message를 만족할 수는 없습니다.

    self-descriptitive message를 만족하려면 IANA에 Media Type을 등록하던가 link 헤더에 데이터에 대한 명세를 profile로 등록해서 self-descriptitive message을 만족할 수 있습니다.

 

  • hypermedia as the engine of application state(HATEOAS) :
    Hypermedia를 통해서 애플리케이션의 상태 전이 또는 자신에 대한 정보를 확인할 수 있는 정보가 담겨야 합니다.

    HATEOAS를 만족할 경우 서버는 link를 언제든지 마음대로 바꿀 수 있습니다. 즉, 클라이언트는 고정된 link가 아닌 서버에서 받은 동적 link를 통해서 상태 전이를 할 수가 있습니다.

    HATEOAS를 만족하려면 link 헤더를 사용하던가, 또는 body에 link에 대한 정보를 넣고 이에 대한 명세를 link 헤더에 profile로 등록하여 만족시킬 수 있습니다.




5. Layered System

 

  • API 서버는 순수 비지니스 로직을 수행 합니다.

 

  • 클라이언트는 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지 인지 할 수 없으며, 이를 통해 중간 서버 (로드 밸런싱, 공유 캐시)를 제공함으로써 시스템 규모 성능 및 확장성 향상 됩니다.




6. Code on demand (optional)

 

  • 서버가 클라이언트에게 코드를 응답해주면, 클라이언트는 응답 코드를 실행 할 수 있습니다. ex) JavaScript




REST의 장점

 

  • HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용이 가능합니다.

 

  • Client와 Server간의 의존성이 없기 때문에 독립적인 업데이트가 가능합니다.

 

  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있습니다.




REST의 단점

 

  • HTTP Method 형태가 제한적입니다.

 

  • 표준이 존재하지 않아 올바른 REST API 작성 및 관리의 어려움이 있습니다.




REST API란?

 

  • REST API란 REST 아키텍쳐 스타일을 따르는 API를 말합니다.(아키텍쳐 스타일은 제약 조건들의 집합을 의미합니다.)




RESTful이란?

 

  • RESTful이란 REST API의 설계 규칙을 올바르게 지킨 시스템을 말합니다. RESTful 시스템을 잘 지킨 서비스는 URI와 HTTP Method만을 가지고 어떤 요청을 하는지 파악하기 용이합니다.




REST API 설계 시 주의사항

 

  • REST API를 올바르게 설계하기 위해서는 아래와같은 규칙을 지켜야합니다.

 

1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용해야 합니다.

 

2. 슬래시( / )로 계층 관계를 표현합니다.

 

3. URI 마지막에는 슬래시(/)를 포함하지 않습니다.

 

4. 언더바(_) 대신 하이픈(-)을 사용합니다.

 

5. 파일 확장자는 URI에 포함하지 않습니다.

 

6. 자원에 대한 행위를 URI에 포함하지 않습니다.

 

7. REST API로 요청한 데이터는 HTML,CSS가 아닌 JSON 또는 XML 형식으로 반환합니다.

 

8. HTTP 응답 상태 코드 사용한다

 

  • 1xx(정보) : 요청을 받았으며 프로세스를 계속 진행합니다.

 

  • 2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용하였습니다.

 

  • 3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요합니다.

 

  • 4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.

 

  • 5xx(서버 오류) : 서버가 명백히 유효한 요청에 대한 충족을 실패했습니다.




REST API 예외상황

 

  • GET, DELETE Method는 body를 사용할 수 없기 때문에 개발하는데 있어서 예외적으로 POST와 같은 다른 Method를 사용해야 하는 경우가 있습니다.

 

  • 클라이언트 요청에 대한 성공과 오류에 대한 메시지를 HTTP 상태 코드를 사용하여 소통을 합니다.




'네트워크 > HTTP' 카테고리의 다른 글

HTTP 상태코드란?  (0) 2023.01.29
HTTP API 설계 방법과 HTTP 메서드와 특징  (1) 2023.01.29
HTTP 메시지 구조  (0) 2023.01.29
HTTP/0.9 ~ 2.0의 각 특징  (1) 2023.01.29
HTTPS( HyperText Transfer Protocol over Secure )란?  (0) 2023.01.24

+ Recent posts