CS/Network

REST? REST API? RESTful? 한방에 정리

닝닝깅 2023. 8. 22. 17:42

출처: https://velog.io/@namezin/REST

개요

REST와 RESTful의 차이가 문득 궁금해져서 정확한 개념 정리를 하기 위해서 정리하게 된 글이다.

 

1. REST란?

정의

사전적 의미는 다음과 같다.

  • 웹에 존재하는 모든 자원에 고유한 URI를 부여해 활용하는 것
  • 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형

즉, REST란 HTTP URI를 통하여 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD 연산을 적용하는 방법이다.

* HTTP URI : 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 붙이는 고유한 ID

* CRUD : Create(생성) / Read(조회) / Update(수정) / Delete(삭제)

 

특징

0. HTTP 프로토콜의 형식을 그대로 활용한다.

웹의 장점을 최대한 활용할 수 있는 아키텍쳐 스타일이다.

 

1. 서버-클라이언트 구조로 상호 의존성을 줄인다.

서버 : API를 제공하고 API 요청 시 비즈니스 로직 처리와 데이터 저장을 책임진다.

클라이언트 : 사용자 인증, 상태(세션, 로그인 정보)관리와 서버 리소스 요청을 책임진다.

 

2. Stateless(무상태)이다.

서버는 작업을 위한 상태정보(세션, 쿠키 등)를 관리하지 않아야 함. 시스템 영향없이 관리 및 업데이트 가능

 

3. 캐시 처리가 가능하다.

HTTP가 가진 캐싱 기능이 적용되어 서버 응답 시간이 빨라지고 자원 이용률을 향상시킨다.

 

4. 계층화 (Layered System)

- 서버를 다중 계층으로 구성할 수 있다.

- 비지니스 로직을 수행하는 API 서버와 그 앞단에 사용자 인증, 암호화, 로드밸런싱 등의 계층을 추가해 구조상의 유연성 제공한다.

 

5. 인터페이스 일관성(Uniform interface)

아키텍처를 단순화하고 분리해 각 부분을 독립적으로 발전 시킬 수 있다.

 

구성요소

자원 (Resource)접근할 대상, URI를 통해 식별한다

 

예) 

URI 의미
 http://api.domain.com/books/  도서정보 콜렉션 
 http://api.domain.com/books/1/   1번 도서 정보 
 http://api.domain.com/books/1/photo/  1번 도서의 사진
  • 리소스 명은 books처럼 명사를 활용하여 어떤 자원인지 표현한다. 
  • 슬래시(/)는 계층 관계를 나타내는 것으로 컬렉션의 아이템을 지정하는 방식으로 정의한다. ex) books(컬렉션)/1(아이템)

 

행위 (Verb) : 리소스에 대한 행위, 표준 HTTP 메소드에 따라 자원에 접근한다.

 

예)

HTTP 메소드 행위
 POST  자원 생성(Create)
 GET  자원 조회(Read)
 PUT  자원 수정(Update)
 DELETE  자원 삭제(Delete)

 

메시지(Message) : REST에서 자원의 정보는 HTTP 바디, HTTP 헤더, 응답 상태코드를 활용하여 표현한다

 

HTTP 바디

- HTTP 바디에 포함된 데이터를 통해 자원에 대한 정보를 전달한다.

- 데이터 포맷으로는 JSON, XML 등이 있다.

 

HTTP 헤더

- HTTP 바디의 컨텐츠 종류를 명시한다.

- 요청 HTTP 해더는 "Accept" 항목으로, 응답 HTTP 해더는 "Content-type"으로 컨텐츠 타입을 설명한다.

 

응답 상태코드

- 리소스 요청에 대한 응답은 응답 상태 코드로 설명된다.

예) 400 - 요청이 부적절함 / 200 - 요청 정상 수행

 

 

장단점

장점

1. 기존의 웹 인프라를 그대로 이용할 수 있다.

2. HTTP 프로토콜의 표준을 그대로 사용하여 여러 추가적 장점을 가져갈 수 있다.

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

단점

1. 표준이 존재하지 않아 관리가 어렵다.

2. HTTP Method의 형태가 제한적이다.

 

2. REST API란?

정의

REST를 기반으로 구현한 서비스 API이다.

예) 네이버 지도의 API를 사용할 때  REST를 이용해서 사용하는 것이 REST API 이다.

 

핵심 규칙

1. URI는 정보의 자원을 표현해야 한다.

2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.

 

세부 규칙

1. 슬래시 구분자 ( / )는 계층 관계를 나타내는데 사용한다.

 

2. URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.

  • 즉 URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며 URI가 다르다는 것은 리소스가 다르다는 것
  • 역으로 리소스가 다르면 URI도 달라져야 한다.

3. 하이픈 ( - )은 URI 가독성을 높이는데 사용한다.

 

4. 밑줄 ( _ )은 URI에 사용하지 않는다.

 

5. URI 경로에는 소문자가 적합하다.

  • URI 경로에 대문자 사용은 피하도록 한다.

6. 파일확장자는 URI에 포함하지 않는다.

  • REST API 에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다.
  • 대신 Accept Header 를 사용한다.
  • ex) GET: http://restapi.exam.com/orders/2/Accept: image/jpg

7. 리소스 간에 연관 관계가 있는 경우

  • /리소스명/리소스ID/관계가 있는 다른 리소스 명
  • ex) GET: /users/2/orders (일반적으로 소유의 관계를 표현할 때 사용)

 

3. RESTful이란?

- REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다.

예) REST API’를 제공하는 웹 서비스를 RESTful하다고 한다.

 

- REST를 REST답게 쓰기 위한 방법이라고 할 수 있다.

 


Ref

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

https://tech.devgear.co.kr/delphi_news/433404

https://code-lab1.tistory.com/194