이 글은 강의 : 김영한님의 - "[모든 개발자를 위한 HTTP 웹 기본지식]"을 듣고 정리한 내용입니다. 😁😁
URI 설계시 가장 중요한 것은 리소스 식별이다.
동작을 제외한 자원 그 자체를 리소스라한다. 회원 등록 시스템을 예로 들면, 회원을 등록하거나 수정 혹은 삭제하는 행위는 리소스가 아니다.오직 회원이라는 개념만이 리소스라 할 수 있다.
동작은 HTTP 메서드로 구분한다. (EX. GET, POST, PUT, PATCH, DELETE)
✨ 게층 구조상 상위 자원을 컬렉션으로 보기에 복수형으로 사용하는게 좋다.
EX: member-> members
가장 중요한 것은 리소스를 식별하는 것!
우리는 리소스만 식별하면 된다. 행위는 HTTP메서드가 구분해주니까!
클라이언트가 서버에 요청을 할 때 기대하는 행동!
ex) GET은 무언가를 달라는 것이고 POST는 요청 데이터를 처리해줘! 이런 식으로 활용할거야.
q=hello&hl=ko
1.리소스 등록 : 서버가 아직 식별하지 않은 새 리소스 생성(회원 등록)
2.요청 데이터 처리 : 단순한 데이터 생성을 넘어 프로세스를 처리해야 하는 경우로, 꼭 새로운 리소스가 생성되지 않을 수도 있다.
POST /order/{orderId}/start-delivery (컨트롤 URI)
이처럼 경우에 따라 리소스단위가 아닌 행위가 포함된 URI 설계를 할 수도 있는데 이런 경우를 Control URI라 한다.
리소스 대체의 목적으로 리소스가 있을 경우 대체, 없을 경우 생성한다.
- (쉽게 이야기해서 리소스를 완전히 대체한다고 이해하자)
특정 리소스를 식별하기에 POST와는 구별점을 가진다.
즉 클라이언트가 리소스 위치를 알고 URI를 지정한다.
ex) PUT/members/100 HTTP/1.1
--> 리소스 호출시마다 로그가 남는다 하여도 이는 리소스에 대한 영향은 아니기 때문에 고려하지 않는다.
메서드를 반복해서 호출하더라도 결과가 동일해야 한다.
GET, PUT, DELETE같은 경우 여러번 호출하더라도 GET같은 데이터를 조회, PUT은 대체된 값을 반환하기에 동일, DELETE도 결과를 삭제하기에 같은 요청을 하더라도 삭제된 내용이 복구되지는 않기에 멱등성을 성립한다.
POST의 경우 회원 등록을 두번하거나 주문을 두번할 경우 에러가 발생하거나 주문 중복이 생길 수 있기 때문에 멱등성이 성립하지 않는다.
멱등은 외부 요인으로 중간에 리소스가 변경되는 것까지 고려하지는 않는다.
캐시는 뒤에서 자세히 공부할꺼야.