먼저 API에 대해서 먼저 알고가자.
Client-Server + Stateless + Cache
Layered System(계층화)
Uniform Interface(인터페이스 일관성)
리소스가 URL로 식별되어야 한다. (자원의 식별)
리소스를, 수정, 추가할때 HTTP메시지에 표현을 해서 전송한다. (메세지를 통한 리소스 조작)
//올바른 REST
예약 생성 : POST /reservation/2013012500001
예약 수정 : PUT /reservation/2013012500001
예약 조회 : GET /reservation/2013012500001
예약 취소 : DELETE /reservation/2013012500001
//잘못된 REST
예약 생성 : POST /reservation/2013012500001?cmd=insert
예약 수정 : POST /reservation/2013012500001?cmd=update
예약 조회 : POST /reservation/2013012500001?cmd=select
예약취소 : POST /reservation/2013012500001?cmd=delete
메시지는 스스로 설명 가능해야 한다. (자기서술적 메시지)
애플리케이션의 상태는 Hyperlink를 이용해 전이되야 한다. (HATEOAS 하이퍼미디어)
서버가 요청을 할 때 요청에 필요한 URL를 응답에 포함시켜 반환한다.
아래처럼 하면 client에서는 rel로 요청 URI를 사용하여서 client는 수정 안해도 된다.
//Uniform Interface를 완벽하게 해주는 HAL JSON
{
"data": { // HAL JSON의 리소스 필드
"id": 1000,
"name": "게시글 1",
"content": "HAL JSON을 이용한 예시 JSON"
},
"_links": { // HAL JSON의 링크 필드
"self": {
"href": "http://localhost:8080/api/article/1000" // 현재 api 주소
},
"profile": {
"href": "http://localhost:8080/docs#query-article" // 해당 api의 문서 메세지 스스로 설명
},
"next": {
"href": "http://localhost:8080/api/article/1001" // article 의 다음 api 주소 HATEOAS
},
"prev": {
"href": "http://localhost:8080/api/article/999" // article의 이전 api 주소 HATEOAS
}
}
}
https://joomn11.tistory.com/26
https://coco16.tistory.com/10