보통 REST API, RESTful API로 많이 접해봤을 것이다. 하지만 정확히 REST란 무엇이고, REST와 Restful의 차이점이 무엇인지 정확히 알진 못한다.
이러한 것과 REST라는 개념이 어떻게 시작되었는지 알아보자.
기존 웹은 GET, POST 메소드를 주로 사용하였다. 브라우저에서 서버로 무언가를 받을 때는 GET을 사용했고, 브라우저에서 서버로 무언가를 보낼 때는 POST를 사용했다.
하지만 현재는 GET을 보낼 때/받을 때 전부 사용하고 있다. (uri 파라미터, 쿼리 파라미터 등) 또한 원래 보낼 때 사용하던 POST는 GET 요청으로 할 수 없울 정도로 URL 길이가 길거나, 파일 업로드, 보안이 필요할 때만 사용하고있다.
REST의 사전적 정의는 웹의 자원을 정의하고 자원에 대한 주소를 지정하는 방법에 대한 아키텍처 스타일이다.
또한 HTTP 메소드 (GET/POST)를 확장하여 웹이 아니더라도 HTTP로 통신할 수 있도록 확장한 형태이다.
방화벽이 생기면서 웹이 아닌 것도 HTTP 통신을 할 필요가 생겼다.
기본적으로 방화벽의 등장으로 인해 80, 8080, 443, 8443 포트 이외에는 block하고 HTTP, HTTPS, TCP만 통과할 수 있게되었다. 따라서 기존 FTP(20), telnet(23) 등 HTTP가 아닌 프로토콜 포트 전부가 방화벽을 넘어갈 수 없는 것이었다.
결과적으로 방화벽을 넘어갈 수 있도록 HTTP를 사용하는 웹이 아닌 형태가 필요해졌다.
대표적으로 80/HTTP를 사용하는 파일 서버인 WebDAV, ElasticSearch 등이 존재한다.
이러한 형태로 계속 발전하기 이해 HTTP를 확장하여 GET/POST/PUT/DELETE를 전부 가능하도록 하였다.
REST는 HTTP 메소드를 활용하여 CRUD 작업을 매핑한다.
CRUD는 Create, Retrieve, Update, Delete를 의미한다.
Rest를 CRUD 사용하는 것이라고 정의하면, Restful은 무엇일까?
기본적으로 url 파라미터 부분에서 차이를 보이는데, GET 요청시 a=2, b=3이라는 값을 요청했다고 하자
REST API: localhost/main?a=2&b=3
RESTful API: localhost/main/2/3
REST API는 GET 방식을 그대로 사용하는 것이고, RESTful API는 REST 형식처럼 CRUD를 사용하되 더 예쁘게 다듬어주는 형태이다. (=pretty url) 따라서 URL 설계 측면에서 더 직관적이고, 자원 중심적인 접근을 할 수 있다.
REST 가 나온 배경: 방화벽의 도입으로 HTTP 통신을 해야하는 것이 늘어났음 -> HTTP 메소드의 확장이 일어난 형태가 REST
REST vs RESTful: 기본적으로는 같으나 RESTful 형태가 더 다듬어진 형태 (pretty url)