멱등성이란?
•
같은 연산을 여러번 실행해도, 그 결과가 달라지지 않는 성질
→ 호출 횟수에 상관 없이 동일한 결과값을 내어주는 성질
public int abs(int number) {
return Math.abs(number);
}
Java
복사
•
위 함수는 결과값이 동일하므로 멱등성을 갖는다.
HTTP 메서드의 멱등성
•
아래 세 요소가 충족되면 HTTP 메서드가 멱등성을 가진다고 한다
1.
한 번 요청을 보내는 것과 연속으로 보내는 것이 같은 효과를 지닌다
2.
서버의 상태도 동일하게 남는다
3.
어떠한 부수 효과(side effect)도 존재하면 안된다.
•
REST API에서 GET, HEAD, PUT, DELETE 메서드는 멱등성을 가져야 한다
•
POST 메서드는 멱등성을 갖지 않는다.
•
안전한 메서드의 경우 멱등성을 갖는다
◦
안전한 메서드 : HTTP 메서드가 서버의 상태를 바꾸지 않는 메서드. (읽기 작업만 수행)
◦
멱등성을 갖는 모든 HTTP 메서드가 안전한 메서드는 아니다
GET 메서드
GET /data
GET /data
GET /data
Java
복사
•
여러 번 연속해서 호출해도 클라이언트가 받는 응답은 동일
•
서버의 상태가 변하지 않음 (단순 조회)
PUT 메서드
PUT /data/3
PUT /data/3
PUT /data/3
Java
복사
•
3번 데이터를 여러 번 수정해도, 3번 데이터는 우리가 요청한 값으로 항상 같은상태
DELETE 메서드
DELETE /data/3 -> Returns 200 if idX exists
DELETE /data/3 -> Returns 404 as it just got deleted
DELETE /data/3 -> Returns 404
Java
복사
•
DELETE 요청을 보낸 시점에 3번 데이터는 삭제된 상태
→ 여러번 수행되어도 동일한 결과
•
상태 코드는 응답마다 다를 수 있지만 서버의 상태는 변하지 않음
POST 메서드
POST /add_row HTTP/1.1
POST /add_row HTTP/1.1 -> Adds a 2nd row
POST /add_row HTTP/1.1 -> Adds a 3rd row
Java
복사
•
여러 번 호출할 경우, 여러 열을 추가
→ 결과가 달라짐
→ 서버의 상태가 달라지므로 멱등성을 위배
한 줄 정리
HTTP 에서의 멱등성이란, 메서드 호출 시 여러 번 호출해도 서버의 상태가 변하지 않고 항상 같은 효과를 가진다. REST API에서 GET, PUT, DELETE 는 멱등성을 보장해야 한다.