Dev.GA

[REST] RESTful 파헤치기 본문

Dev.Back-End/RESTful

[REST] RESTful 파헤치기

Dev.GA 2018. 4. 13. 10:51

[REST] RESTful 파헤치기



1. REST 특징


지난번 포스팅 내용에서 알 수 있듯이 REST는 ROA(Resource Oriented Architecture)의 개념을 구현한 기술로, ROA의 4가지 속성(Addressability, Connectedness, Statelessness, Homogeneous Interface)과 깊은 관련이 있다. ROA의 4가지 속성과 함께 REST의 특징에 대해 알아보자.


  Statelessness : 무상태


REST의 가장 특징적인 강점으로 단어 뜻 그대로 상태를 유지하지 않는 다는 뜻이다. stateless하다는 말은 사용자나 클라이언트의 정보를 서버쪽에 저장/유지하지 않는다는 의미로 세션과 같은 상태정보를 유지하지 않는다는 의미다.


 ■ Cacheable : 캐쉬가능


REST는 기존의 웹 인프라를 그대로 사용하기 때문에, HTTP 프로토콜 기반의 로드밸런서나 SSL은 물론 HTTP의 캐쉬기능을 적용할 수 있다.


 ■ Self-Descriptiveness : 자체 표현구조


REST는 자체 표현구조를 가지고 있어 REST API의 요청URI만 보고도 직관적으로 API를 이해할 수 있다는 강점이 있다.


 ■ Addressablility : 주소로 표현 가능함


자체 표현구조와 비슷한 특징으로 제공하는 모든 리소스에 대해서 직관적인 URI로 제공할 수 있으며, 해당 리소스에 URI로 직접 접근할 수 없고 LINK를 통해서 접근해야한다면 이는 RESTful하지 않은 웹서비스이다.


 ■ Connectedness : 연결


하나의 리소스는 서로 주변에 연관된 리소스들과 연결되어 표현되어야 한다.


 Homogeneous Interface : 동일 인터페이스


REST는 HTTP에서 제공하는 4가지 메소드(GET, PUT, POST, DELETE)를 이용해서 서비스를 제공한다. 이 4가지 이외에 HEAD나 OPTION을 추가하는 경우도 있다.



2. CRUD


REST는 HTTP에서 제공하는 4가지 메소드(GET, PUT, POST, DELETE)를 이용하여 REST서비스를 제공한다. 이 4가지 요청 메소드는 흔히 DB의 CRUD와 같은 기능을 하게되는데,


  • GET(R) : 리소스 자원을 read할때

  • PUT(U) : 리소스 자원을 update/create할때

  • POST(C) : 리소스 자원을 create할때

  • DELETE(D) : 리소스 자원을 delete할때


이 4가지 분류 밖에 없어 이에 속하지 않는 기능의 경우 작업에 대한 처리가 모호해지는 단점이 있다.


리소스 자원에 대한 요청 URL이 동일하여도 요청메소드에 따라서 각각 다른 비지니스 로직을 수행하게 된다.



3. REST 장점


 - OPEN API를 제공하기 쉽다.

 - 원하는 타입의 데이터를 주고 받을 수 있다.(XML, JSON 등)

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

 - 사용이 쉽다.

 - 요청에 독립적이라 세션을 이용하지 않는다.

 - 지원하는 프레임워크 혹은 언어 등이 없어도 구현이 가능하다.



4. REST 단점


 - 표준이 없다.

 - HTTP프로토콜 모델에만 지원가능하다.

 - HTTP메소드(GET, PUT, POST, DELETE) 4가지 밖에 사용할 수 없다.

 - 분산환경에 유용하지 않다.



5. REST API 디자인 가이드


 REST 구성요소

  • 자원(Resource) -> URI

  • 행위 -> HTTP 요청메소드(GET, PUT, POST, DELETE)

  • 표현(Representation)


 REST URL 작성 규칙


위의 REST의 특징에서도 본바와같이 자체 표현구조를 가진다고 했다. REST API는 요청 URI만 보고도 직관적으로 이해할 수 있어야 한다.


GET /user/박지성 ---> ( O )

POST /insertUser/손흥민 ---> ( X )

POST /user/insert/기성용 ---> ( X )


1. URI는 자원(Resource)를 표현해야 한다.


2. 자원에 대한 행위는 HTTP 메소드로 표현해야 한다.

 => URI에는 행위를 나타내는 동사가 아닌 명사형태로 작성해야한다.

 => 행위를 나타내는 부분은 HTTP 메소드로 표현한다.




'Dev.Back-End > RESTful' 카테고리의 다른 글

[REST] RESTful 웹서비스 만들기  (0) 2018.05.11
[REST] REST란 무엇인가? REST맛보기  (0) 2018.04.04
Comments