"REpresentational State Transfer"
자원을 이름(자원의 표현, uri)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것.
소프트웨어 개발 아키텍처 중 한 형식이다.
일반적인 프로그래밍의 경우 특정 함수를 호출 할때, 함수의 이름을 사용해서 그 함수를 호출한다.
그렇다면 웹은? 클라이언트와 서버 사이에서 '통신'을 통해 CRUD에 해당하는 함수를 호출해야 하는데, 이때 representation과 HTTP method를 사용한다.
어떤 자원에 대해 함수를 호출할 것이냐?를 자원의 대표(URI)로 표현한다.
어떤 자원에 대해 어떤 동작을 수행할 것이냐?는 HTTP method로 정의한다.
즉, REST란 클라이언트와 서버간 통신을 어떻게 표현할 것인가?를 정의하는 것이다.
REST의 구성 요소
REST 아키텍처를 기반으로 서비스 API를 구현한 것. 한마디로 REST한(RESTful) API
그렇다면 왜 RESTful API를 작성해야 할까? DELETE 기능을 POST 메서드로 구현해도 동작하지만, 다른 사람이 그 코드를 본다면? 혹은 작성자가 유지보수를 해야 한다면? 가독성이 많이 떨어질 것이다. 결국 RESTful API는 "우리 다같이 API좀 일관성 있게 만듭시다!" 라고 약속한 비공식적 규약이라 할 수 있다.
먼저 RESTful하지 못한 예를 살펴보는 것이 이해가 빠를 것 같다.
| 기능 | CRUD | HTTP method | ROUTE |
| resource 전체를 조회 | READ | GET | /resources |
| 특정 resource를 조회 | READ | GET | /resources/:id |
| 조건을 만족하는 resource들을 조회하거나 정렬 | READ | GET | /resources/?query=condition |
| 특정 resource의 전체를 수정 | UPDATE | PUT | /resources/:id |
| 특정 resource의 일부 수정 | UPDATE | PATCH | /resources/:id |
| 특정 resource를 삭제 | DELETE | DELETE | /resources/:id |
위의 표에서 route를 잘 살펴 보면, /resources는 resource 자원의 "집합"에 대해 CRUD를 수행하기 때문에, 복수형으로 표기한다.
:id (path variable)
resources 자원 중에서 특정 자원을 식별할 경우에는 path variable을 사용한다.
?query (query string)
resources 자원들을 정렬, 필터링을 할 경우 사용한다.
REST는 클라이언트와 서버 간 CRUD 수행시 무엇을, 어떻게 표현할 것인가에 대한 방법론이다.
이 REST를 적용한 API를 REST API or RESTful API라 부른다.
REST API를 작성하는 목적은 간단하다. 가독성이 좋고, 일관성 있는 API를 작성하는 것.
혼자서만 작업하는 API의 경우에는, POST 메서드를 사용해서 DELETE를 수행한다던지, /api/resources/delete-resource 라는 url을 작성해도 무관할 것이다. 하지만 그게 아니라면 RESTful API를 작성할 것.
오우 정리가 잘 되 있는거 같아서 이해가 잘되네용~