스마트웹앱콘텐츠전문가/직장

REST, REST API, RESTFUL

9D4U 2019. 8. 12. 17:34
728x90
반응형

[REST]

※ 간단하게 HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD 동작을 적용하는 것을 의미.
- 웹(HTTP)의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍처(구조) : Representational Safe Transfer(REST)
- 요소 : 리소스, 메서드, 메세지

- 메서드(행위 : HTTP METHOD) : REST에서는 행위에 대한 메서드를 HTTP 메서드 그대로 사용. 각각 CRUD 대응
- POST : 의미는 Create, 
- GET : 의미는 Select, 
- PUT : 의미는 Update, 
- DELETE : 의미는 Delete, 


- 리소스(URI) : 모든 자원에는 고유한 ID가 존재하고, 이 자원은 서버에 존재.

- 메세지(표현) : 클라이언트가 자원의 정보(상태)에 대한 조작을 요청하면 서버는 이에 대한 응답(표현)을 보냄.
 REST에서 하나의 자원은 JSON, XML, TEXT, RSS등 여러 형태의 표현으로 나타내어 질 수 있음.(JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적)

- REST 의 특징
1. 통일된(단일화) 인터페이스 : URI로 지정한 리소스에 대한 조작을 통일되고 한장적인 인터페이스로 수행하는 아키텍처 스타일, 따라서 HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능함.(특정 언어나 기술에 종속되지 않음)
2. 무상태성 : 작업을 위한 상태정보(세션 정보나 쿠키정보 등)를 따로 저장하고 관리하지 않음.(-> 서비스의 자유도가 높아지고, 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해짐)
3. 캐시가능 : HTTP라는 기존 웹 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용 가능. 따라서 HTTP가 가진 캐싱 기능이 적용 가능.(HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현 가능)
4. 자체 표현 구조(Self-descriptiveness) : REST API 메시지만 보고도 이를 쉽게 이해할 수 있음(자체 표현이 있기 때문)
5. 클라이언트 서버 구조 : 자원이 있는 쪽이 서버, 자원을 요청하는 쪽이 클라이언트가 되고, 각각의 역할이 분리되어 있음.
6. 계층형 구조 : REST 서버는 다중 계층으로 구성될 수 있고, 보안*로드 밸런싱*암호화 계층을 추가해 구조상의 유연성을 둘 수 있음. 또한 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용 할 수 있음.

- 디자인 가이드 
1. URI는 정보의 자원을 표현해야 함(리소스명은 동사보다는 명사를 사용)
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)로 표현
예시)  DELETE /members/1

CF) REST API
- API(Application Programming Interface) : 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램 간 상호작용을 촉진하며, 서로 정보를 교환가능하도록 하는 것.
- REST API : REST 기반으로 서비스 API를 구현한 것.(예시 : 최근 Open API(구글 맵, 공공 데이터 등))
- 특징 : REST API 기반으로 시스템을 분산해 놓으면, 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 가져할 수 있음.
- REST가 HTTP 표준을 기반으로 구현하므로 HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현 가능 -> 특정 언어나 기술에 종속되지 않음
   RESTful : 공식적으로 명칭을 발표한 것은 아니지만, 'REST API'를 제공하는 웹 서비스를 'RESTful'하다고 할 수 있음.

   [참고]https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html, https://meetup.toast.com/posts/92

728x90