REST는 Representational State Transfer의 약자로,
웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일을 뜻한다.
REST는 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해
해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
쉽게 말해서 REST는 자원을 정의하고 자원에 대한 행위를 정의하는 것이다.
HTTP URI만을 보고도 사람이 쉽게 이해할 수 있도록 만들어야 한다.
REST는 다음과 같은 구성 요소로 구성된다.
모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
Client는 URI를 이용하여 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.
예시 /users
HTTP 프로토콜의 Method를 사용한다.
Client가 Server로 요청을 보내면 Server는 요청에 대한 응답을 보낸다.
이때 응답에 포함되는 내용은 Resource의 상태 정보이다.
이러한 Resource의 상태 정보는 JSON, XML, TEXT, RSS 등 여러 형태로 나타낼 수 있다.
이러한 표현들을 REST에서는 Representation이라고 한다.
예시 JSON
{
"id": 1,
"name": "홍길동",
"age": 20
}
REST는 다음과 같은 특징을 가진다.
위와 같은 특징을 가지도록 전부 지켜야 하는 것은 아니며, RESTful하다고 할 수 있는 정도는 개발자의 주관이다.
리차스든의 REST 아키텍처 스타일은 다음과 같다.
계층 별로 나누어서 설명하겠다.
일단 계층은 다음과 같이 구성 된다.
REST API를 설계할 때 가장 기본적인 형태이다.
0단계 에서는 단순히 HTTP Method만 사용 한다.
이를 REST API라고 부르지 않지만 0단계는 REST API를 설계할 때 가장 기본적인 형태이다.
1단계 에서는 URI를 사용한다. 모든 자원은 개별 리소스에 맞는 엔드 포인트를 사용해야 하고
받은 정보에 대한 정보를 응답으로 전달해야한다.
HTTP Verbs는 HTTP 프로토콜의 Method를 사용하는 것을 의미한다.
HTTP Method에 맞게 자원을 처리하고 응답을 전달한다.
POST 일 때 : 자원을 생성한다.
GET 일 때 : 자원을 조회한다.
PUT 일 때 : 자원을 수정한다.
DELETE 일 때 : 자원을 삭제한다.
FETCH 일 때 : 자원을 일부 수정한다.
위와 같은 행위 일 때 각각 로직에 맞는 HTTP Method를 사용한다.
HATEOAS는 Hypermedia As The Engine Of Application State의 약자로,
REST API를 설계할 때 자원에 대한 상태를 전달하는 방식이다.
HATEOAS는 자원에 대한 상태를 전달하는 방식이다.
예를 들어, 자원을 생성하고 조회하는 API가 있다고 하자.
자원을 생성하는 API는 다음과 같다.
{
"id": 1,
"name": "홍길동",
"age": 20
}
자원을 조회하는 API는 다음과 같다.
{
"id": 1,
"name": "홍길동",
"age": 20,
"links": [
{
"rel": "self",
"href": "http://localhost:8080/api/v1/user/1"
},
{
"rel": "update",
"href": "http://localhost:8080/api/v1/user/1"
},
{
"rel": "delete",
"href": "http://localhost:8080/api/v1/user/1"
}
]
}
자원을 조회하는 API는 자원의 상태를 전달하고, 자원의 상태를 변경할 수 있는 링크를 전달한다.