ENN
HTTP 메서드와 멱등성(idempotent) 본문
HTTP API와 REST API
HTTP API는 HTTP를 통신방식으로 사용하는 API를 일컫는다. REST API는 HTTP API보다 좁은 개념으로 사용되며, REST를 지키면서 사용되어야 하는 API를 일컫는다. 이때 REST는 Representational State Transfer의 약자로 다음 4가지 조건을 만족해야 한다.
- 자원의 식별
- 메시지를 통한 리소스 조작
- 자기서술적 메시지
- 애플리케이션의 상태에 대한 엔진으로서의 하이퍼미디어
HTTP 메서드
CRUD에 각각 대응되는 HTTP 메소드는 다음과 같다.
CRUD | HTTP method |
Create | POST |
Read | GET |
Update | PUT / PATCH |
Delete | Delete |
여기서 궁금증이 생길 것이다. 업데이트를 할 때 사용할 수 있는 PUT과 PATCH의 차이점은 무엇일까? PUT은 요청마다 같은 리소스를 반환하여 데이터를 전부 수정하지만, PATCH는 일부분만 수정할 수 있어 요청마다 다른 리소를 반환할 수 있다. PUT처럼 매 요청마다 같은 리소를 반환하면 '멱등하다'고 하는데 이어서 멱등성에 대해 더 자세히 알아보자.
멱등성(Idempotence)
요청을 여러번 보내도 매번 같은 리소스를 반환할 때, 이를 '멱등하다'고 일컫는다. 동일한 요청을 한 번 보내든, 여러번 보내든 같은 효과가 나고, 서버의 리소스 상태(응답)도 동일하게 남는다면 해당 HTTP 메서드는 멱등하다고 할 수 있다. 그렇게 위에서 언급한 5개의 메서드 중에 멱등성을 가지지 않는 메서드는 무엇일까?
답은 미리 언급한 PATCH과 POST이다. POST의 경우 같은 요청을 여러번 보내면 매번 새로운 자원이 생겨날 수 있고, 결국 서버의 상태가 변경될 수 있기 때문에 멱등성을 가지지 않는다. PATCH의 경우 앞서 설명한 것과 같다.
그렇다면 GET, PUT, DELTE는 왜 멱등성을 가지는지 알아보자. GET의 경우 같은 요청을 여러번 보내면 매번 같은 리소스에 대한 요청을 보낸 것이기 때문이다. DELETE는 처음 요청을 보내면 특정 리소스가 삭제되고, 여러번 요청을 보내도 해당 리소스는 이미 삭제된 상태이니 서버의 리소스 상태도 동일할 것이다. PUT의 경우 앞서 설명한 것과 같다.
REST API 설계 원칙
- -'/'는 계층 관계를 나타낸다.
- URI 끝에 '/'를 포함하지 않는다.
- 하이픈(-)은 가독성을 위해 사용한다.
- 언더스코어(_)는 URI에 사용하지 않느다.
- URI에는 소문자가 적합하다.
'백엔드' 카테고리의 다른 글
Docker compose를 이용한 Spring Boot, Mysql 배포 (0) | 2022.09.13 |
---|---|
ResponseEntity vs DTO (0) | 2022.09.11 |
Java Optional의 개념 및 사용법 (0) | 2022.09.11 |
Spring 예외 처리 : HandlerExceptionResolver (0) | 2022.09.02 |
자바 synchronized 개념정리 (0) | 2022.07.24 |