안전(Safe)
- 호출해도 리소스를 변경하지 않는다.
Q. 그래도 계속 호출해서, 로그 같은게 쌓여서 장애가 발생할 경우?
A. 안전은 해당 리소스만 고려한다. 해당 부분까지 고려하지 않는다.
멱등(Idempotent)
- f(f(x)) = f(x)
- 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.
- 멱등 메서드
GET | 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다. |
PUT | 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다. |
DELETE | 결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다. |
POST | 멱등이 아니다. 두 번 호출하면 같은 결제가 중복해서 발생할 수 있다. |
- 활용
- 자동 복수 메커니즘
- 서버가 TIMEOUT 등으로 정상 응답을 못 주었을 때, 클라이언트가 같은 요청을 다시 해도 되는가에 판단 근거
Q. 재요청 중간에 다른 곳에서 리소스를 변경해버리면?
- 사용자1 : GET > username : A, age:20
- 사용자2 : PUT > username : A, age:30
- 사용자3 : GET > username : A, age:30 > 사용자2의 영향으로 바뀐 데이터가 조회
A. 멱등은 외부 요인으로 중간에 리소스가 변경되는 것까지는 고려하지 않는다.
캐시가능(Cacheable)
- 응답 결과 리소스를 캐시해서 사용해도 되는가?
- GET, HEAD, POST, PATCH 캐시 가능
- 실제로는 GET, HEAD 정도만 캐시로 사용, POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 쉽지 않음.
-------------------------------------------------------------------
- safe : 리소스를 변경하지 않는, 즉 읽기전용 메서드(GET, HEAD)를 말한다.
- 멱등 : 특정 메서드를 여러번 호출하여도 결과가 같다.
--------------------------------------------------------------------
- GET, HEAD : Safe하면서, 멱등하다.
- POST : 리소스의 위치를 지정하지 않았을 때 리소스를 생성하는 등 데이터를 변경하고 새로 생성된 결과를 보내줄 수 있으므로 safe하지도 않고, 멱등하지도 않다.
- PUT : 리소스의 위치를 클라이언트가 알고 있고, 기존 리소스를 새로운 리소스를 대체하므로 동일한 데이터로 요청하면 결과가 같다.
그러므로 safe하지 않지만, 멱등하다.
- DELETE : 클라이언트가 지정한 리소스를 삭제, 즉 수정이 일어나지만 삭제라는 동일한 결과를 제공하므로 safe하지 않지만, 멱등하다.
참고 : https://inf.run/haHk + 내가 이해한대로 생각 정리
'네트워크' 카테고리의 다른 글
HTTP API 설계 (0) | 2022.03.28 |
---|---|
HTTP 메서드 활용 (0) | 2022.03.28 |
HTTP 메서드 종류 및 좋은 API URI 설계 (0) | 2022.03.25 |
HTTP 메시지 (0) | 2022.03.25 |
Stateful, Stateless 차이, 비연결성(connectionless) (0) | 2022.03.25 |
댓글