리소스 식별
이다.리소스는 어떠한 행위, 동작이 아닌 개념이다.
예를들어 회원을 "등록, 수정, 조회"하는게 리소스가 아니라
"회원"이라는 개념이 리소스이다.
그럼 이 "회원" 리소스를 식별하여 URI에 매핑하면 된다.
그리고 이 리소스와 행위를 분리해야한다.
control URI
라고 해서 정말 어쩔 수 없이POST /orders/{orderId}/start-delivery
이런식으로 작성될 수도 있다.당연 값을 바꾸는 다른 HTTP method들은 safe하지 않는다고 나와있다.
그럼 GET을 무한대 호출해서 로그가 많이 쌓여 서버에 장애가 발생하면 안전하지 않은거 아닌가? -> 여기서 "안전"이라는 개념은 리소스의 변경에만 해당하는 말이지 서버의 안전까지 고려하는 부분은 아니다.
f(f(x)) = f(x)
아이덴포텐트 즉, 여러번 호출하여도 한 번 호출한 것 거처럼 "행위"결과가 같다는 것이다.
그럼 POST나 PATCH 처럼 특정 값을 바꾸는 메서드들은 당연 결과가 다를 수 있기 때문에 멱등하지 않는다.
예를들어 2번 결제하면 2번 결제가 되어버린다. 즉, 함수를 2번 호출하면 1번 호출한 것과 같은 결과가 나오는게 아니다는 것이다.
그러나 PUT과 DELETE는 멱등하다. 왜일까? -> 정확히 말하면 "행위의 결과"가 같다고 볼 수 있기 때문이다.
PUT은 항상 값을 갈아치우는 결과를 받고
DELETE는 항상 값을 삭제하는 결과를 받기 때문이다.