REST란 무엇인가? 

 

REST (Representational State Transfer: 자원의 상태 전달) 

- 말 그대로  자원(Resource)을 표현(Representation)으로 구분하여 상태를 주고 받는 것(Transfer-Verb)으로, 웹의 장점을 최대한 활용하기 위해 쓰이는 아키텍쳐 스타일이다.

 

REST API(Application Programing Interface) 

-REST 기반으로 API를 구현한 것.

 

RESTful 

- REST의 조건을 잘 갖춘 웹 서비스를 일컫는 용어로 주로 REST API를 제공하는 웹서비스를 RESTful 하다고 표현합니다.


REST의 구성요소

 

(1) 자원(Resource) - URI(Uniform Resouce Identifier)

- 특정 자원의 식별자(Identifier)이다. e.g) '/study/rest_api'

- 자원은 서버에 존재하며, 클라이언트는 URI 로 자원을 지정하여 조작을 서버에 요청한다.

 

# URL (Uniform Resource Locator) 와의 차이점은?

-URL은 특정 자원(URI로 식별할 수 있는 자원)에 접근할 수 있는 위치(locator), 즉 파일 식별자를 일컫는다.

e.g.) https://www.ellie-yoon.tistory.com/study/rest-api.pdf

-따라서 URL 은 URI 의 하위 개념이다.

 

 

(2) 표현(Representation)

- 클라이언트가 자원을 지정하여 조작을 서버에 요청하면, 서버는 적절한 응답을 보낸다.

- 자원의 형태는 XML, JSON, TEXT 로 다양하다. (JSON이 더 자주 쓰인다)

 

 

(3) 행위(Verb) - HTTP Method(GET, POST, PUT, DELETE)

- 자원에 행해지는 행위는 HTTP Method에 의해 일어난다.

- HTTP Method 는 GET, POST, PUT, DELETE 등이 있으며 이를 통해 CRUD (Create, Read, Update, Delete) Operations 을 할 수 있다. 


[Resource] URI 설계 원칙

 

  • 계층관계에서 슬래시 구분자(/) 사용 e.g) https://ellie-yoon.tistory.com/web/spring
  • 소문자 사용 
  • 언더바(_) 대신 하이픈(-) 사용 e.g) https://ellie-yoon.tistory.com/web/rest-api
  • URI 마지막에는 슬래시 포함하지 않음
  • 프로그래밍의 메소드명(행위)는 포함하지 않음 e.g) https://ellie-yoon.tistory.com/web?action='sth'
  • 파일 확장자는 URI에 포함하지 않음 e.g) https://ellie-yoon.tistory.com/web/index.jsp
  • 명사형을 사용하되, 컨트롤러를 일컫을 때는 예외적으로 동사 허용 e.g) https://ellie-yoon.tistory.com/book/order
  • 명사에 단수형보다는 복수형으로 사용 e.g) https://ellie-yoon.tistory.com/web/courses
  • 세션 ID 는 포함하지 않음 e.g) https://ellie-yoon.tistory.com/web?session-id=ellie
  • CRUD 기능을 나타내는 이름은 URI에 사용하지 않음 
  • 일관성있게 서브 도메인을 사용한다. e.g.) (1) https://ellie-yoon.tistory.com/ (2) https://rest-api.ellie-yoon.tistory.com/ 

 

URI 정의와 설계원칙은 아래 링크에서 자세하게 확인이 가능하다.

https://datatracker.ietf.org/doc/html/rfc3986 

[Verb] HTTP Method

 

  의미 CRUD 멱등성 안전성 Path
Variable
Query
Parameter
Data Body

GET 리소스 취득 R O O O O X
POST 리소스 생성 C X X O 권장X O
PUT 리소스 갱신 C/U O X O 권장X O
DELETE 리소스 삭제 D O X O O X
HEAD 헤더 데이터 취득 - O        
OPTIONS 지원하는 메소드 취득 - O        
TRACE 요청메세지 반환 - O        
CONNECT 프록시 동작의 터널 접속으로 변경 - X        


이 HTTP Method들은 다음과 같은 URI 형태로 사용되어 진다. 

GET: 사용자 정보 요청(READ) 

 

http://ellie.com/user/1 
POST: 사용자 정보 생성(CREATE) 

http://ellie.com/user 
PUT: 사용자 정보 생성 및 업데이트(CREATE OR UPDATE) 

http://ellie.com/user/1  
DELETE: 사용자 정보 삭제

http://ellie.com/user/1 


 

REST API 특징

 

(1) Server-Client (서버-클라이언트) 

: 서버와 클라이언트의 독립적인 구조로 서로간의 의존성을 낮춤. 

 

(2) Stateless (무상태성) 

: 클라이언트의  상태정보를 따로 저장하지 않고 (세션 정보나 쿠키를 별도 저장 관리 X) 서버로 들어오는 요청만 단순 처리함.

 

(3) Cacheable (캐시 처리 가능) 

: 클라이언트는 서버의 응답을 임시저장(Cache)하고, Cache를 통한 응답의 재사용을 하여 서버의 부하를 낮춤. Last-Modified 태그나 E-Tag 태그 를 사용하여 HTTP의 캐싱 기능 사용가능. 

 

(4) Layered System (계층형 구조)

:  REST 서버는 다중 계층으로 구성이 가능하여, 구조상으로 유연하며 확장가능함.

 

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

: URI로 지정 자원의 조작을 통일하고, 한정적인 인터페이스로 수행하여 일관성을 유지 및 아키텍처를 단순화가능.

 

(6) Code on Demand (Optional)

: 옵셔널한 특징, 서버로 부터 자바 애플릿, 자바스크립트, 플래시 등 특정 기능을 Client 가 전달받아 실행하는 것

 

 


References

https://fastcampus.co.kr

https://meetup.toast.com/posts/92

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

 

 

'Web > Web 개론' 카테고리의 다른 글

HTTP 상태코드  (0) 2022.01.05

+ Recent posts