REST api 개념을 정리하고, 이전에 구현한 spring boot 게시판의 코드를 보면서 RESTful하게 적용하고자 한다.
1. REST API
REST 는 Representational State Tranfer의 약자로, HTTP 프로토콜(GET, POST, DELETE 등)의 의도에 맞게 디자인하도록 유도하는 소프트웨어 아키텍처이다. 검색하면 항상 나오는 탄생 배경은 더보기에..↙
2000년도 아파치 HTTP 서버 프로젝트 공동 설립자인 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었다. 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어 지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 한다.
출처 : https://meetup.toast.com/posts/92
API(Application Programming Interface) 는 web 어플리케이션 간 데이터를 주고 받을 수 있게 한다. REST 아키텍셔를 따르는 웹 인터페이스를 REST API 라고 한다. REST API 로 데이터 요청을 하면 기존의 웹 프로토콜인 HTTP 를 통해 이루어진다. 서버 측에서 요청을 받으면 HTML, XML, plaintext, JSON 등 다양한 형태의 포맷으로 메세지 반환이 가능하다.
REST API 를 활용하여 웹의 장점을 잘 활용한 서비스를 "RESTful" 하다고 표현하는데, 그러기 위해서는 몇 가지의 규칙이 성립되어야 한다. 규칙들은 아래에 자세히 정리해보았다.
2. REST API 의 구성
REST API 는 3가지의 요소로 구성된다 - Resource (자원), Verb (행위), Respresentation (표현)
구성 요소 | 내용 | 표현 방법 |
Resource (자원) | 자원 | HTTP URI |
Verb (행위) | 자원에 대한 행위 | HTTP Method (GET, POST, DELETE ,PUT) |
Representation (표현) | 자원에 대한 행위, 즉 Verb 에 대한 내용 | HTTP Message Payload |
참고 : poiemaweb.com/js-rest-api 표
3. REST API 특징
1. client-server architecture
client - server 간 resource 가 존재한다.
2. Stateless
서버에서 세션 정보나 쿠키 정보를 따로 관리하지 않아 API 서버는 들어오는 요청만 처리한다.
3. Cacheable
기존의 웹 표준 HTTP 를 사용하기 때문에 HTTP 가 가진 캐싱 기능이 적용 가능하다.
4. Uniform Interface
어플리케이션에 관계 없이 HTTP URI 로 지정한 리소스에 대한 처리가 통일된 형식으로 이루어진다. REST 의 가장 중요한 특징 ("the central feature")이다.
5. 계층형 구조
client-server 간 각각의 역할이 구분되어 서로간 의존성이 줄어든다.
6. Code on demand (optional)
런타임 중 클라이언트가 실행할 수 있는 코드(ex. JAVA Applets, Javascript..)를 전송함으로써 클라이언트의 기능(functionality) 를 확장할 수 있다.
4. REST API 중심 규칙
1. URI 는 정보의 자원을 표현한다.
Resource 명은 명사를 사용하여 자원을 표현하는데 중점을 두어야 한다.
2. Verb, 즉 자원에 대한 행위는 HTTP Method 로 표현한다.
GET, POST, PUT, DELETE 로 자원에 대한 행위를 표현한다.
'Server' 카테고리의 다른 글
node.js 시작하기 (codeanywhere / express) (0) | 2021.02.02 |
---|---|
MySQL 서버 타임존 설정 (0) | 2021.01.22 |
[RESTful] REST API 활용하기 (2) - spring-boot 게시판에 적용 (0) | 2021.01.21 |
VRF (Virtual Routing Forwarding) 이란 (0) | 2021.01.09 |
[WAS/WES] Apache Tomcat이란? (0) | 2021.01.06 |