HTTP 메서드의 속성에 대해서 자세하게 알아본다.*
안전 (Safe Methods)
- 호출해도 리소스의 상태 변경하지 않는다.
- 리소스의 상태를 제외한 부분에 대한 안전은 고려하지 않는다.
멱등 (idempotent)
- f(f(fx)) = f(x)
- 몇 번이 호출되더라도 항상 같은 결과를 반환한다.
- 멱등 속성을 가지는 메서드
- GET: 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.
- PUT: 수정되는 결과는 요청 데이터에 따라 결정된다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다.
- DELETE: 결과를 삭제한다. 같은 요청을 여러번 하더라도 삭제된 결과는 똑같다.
- 멱등 활용
- 자동 복구 메커니즘
- 서버에서 TIMEOUT 등으로 정상 응답을 주지 못했을 때, 클라이언트가 같은 요청을 다시 해도 되는가
여기까지 읽었으면 의문이 드는 부분이 생길 것이다.
API 개발할 때 보면 어제 조회한거랑 오늘 조회한거랑 데이터가 다른데... 그러면 GET은 멱등이 아닌거 아닌가???
라는 의문이 들어야한다.(뭐...필자가 그랬을뿐 이 글을 읽는 여러분은 그러지 않았을수도)
멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려하지 않는다.
아래 예시를 살펴보자.
- 사용자A: GET -> "manufacturer": "hyundai", "modelName": "sonata"
- 사용자B: PUT -> "manufacturer": "hyundai", "modelName": "avante"
- 사용자A: GET -> "manufacturer": "hyundai", "modelName": "avante"
B사용자에 요청에 의해 modelName이 avante로 변경되었지만 외부의 요인으로 변경되었기때문에 고려하지 않는다.
Transaction Repeatable read를 생각하면 좋을듯하다.
해당 트랜잭션내에서는 같은 SELECT 쿼리는 몇번을 날리더라도 SELECT 결과를 리턴한다.
쓰고보니 이건 외부의 요인을 차단한거라는 생각도 들고... 그냥 이해를 돕기위한 예시정도로 보길
캐시가능 (Cacheable)
- 응답 결과 리소스를 캐시해서 사용해도 되는가.
- GET, HEAD, POST, PATCH는 캐시 가능하다.
- 실제로는 GET, HEAD 정도만 캐시로 사용한다.
- POST, PATCH는 본문 내용까지 캐시 키로 고려해야하는데 구현이 쉽지않다.
'Infrastructure > Network' 카테고리의 다른 글
[HTTP] API 설계 예시 (0) | 2021.06.23 |
---|---|
[HTTP] 메서드 - 4 (활용) (0) | 2021.06.23 |
[HTTP] 메서드 - 2 (종류) (0) | 2021.06.23 |
[HTTP] 메서드 - 1 (API URI 설계) (0) | 2021.06.23 |
[HTTP] 메시지 구조 (0) | 2021.06.23 |