REST API 원칙 [Delete Mapping]

jbong·2025년 1월 15일
0

스프링부트

목록 보기
4/15

DeleteMapping에 대해 반드시 주의해야 할 사항에 대해 설명하려고 한다.


Restful API로 프로젝트를 구현할 때, DeleteMapping을 사용해야 하는 경우
보통 리소스를 삭제할 때 DeleteMapping을 사용하는데, 이 때 리소스를 삭제를 할 때는 일반적으로 본문 없이 요청하는 것이 일반적이다.
RSETful API 설계 원칙에 따르면, DELETE 요청은 리소스의 URI를 통해 삭제할 대상을 명확히 지정해야 하며, 본문을 포함하는 것은 비표준적이다.
따라서 400 Bad Request Error가 뜬다는 건 서버에서 @RequestBody를 기대하고 있는 경우, 400 Bad Request 오류가 발생한다.

@RequestBody vs @PathVariable

1. @RequestBody

- 클라이언트가 JSON 데이터를 전송하면, 이를 Java 객체로 변환하여 사용할 수 있도록 한다.
- 그러나 요청 본문이 잘못되거나 형식이 맞지 않을 경우, Spring은 400 Bad Request 오류를 반환한다.

2. @PathVariable

- URL 경로에서 변수를 추출하여 메서드의 매개변수로 사용할 수 있게 해준다
- URL 경로에 포함된 값이기 때문에, 요청 본문과는 독립적으로 동작한다.

그럼 DeleteMapping을 쓸 때 어떤 어노테이션을 사용해야하는가?
결론부터 말하자면 보통 @PathVariable을 사용하는 것이 일반적이다. 위에서 설명 하였듯이,
DELETE 요청은 특정 리소스를 삭제하기 위해 사용되며, 삭제할 리소스를 식별하기 위해 URL 경로에 해당 리소스의 ID를 포함시키는 방식이 많이 쓰인다.
@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    // 사용자 삭제 로직
    return ResponseEntity.noContent().build(); // 204 No Content 응답
}

다음과 같은 코드가 있을 때

@DeleteMapping: HTTP DELETE 요청을 처리하는 메서드에 사용
@PathVariable: URL 경로에서 사용자 ID를 추출하여 메서드의 매개변수로 전달

이렇게 하면 클라이언트는 /users/1과 같은 URL을 통해 ID가 1인 사용자를 삭제할 수 있으며, 요청이 성공적으로 처리되면 204 No Content 응답을 반환할 수 있다. 이 방식은 API의 명확성을 높이고, 클라이언트가 어떤 리소스를 삭제하고 있는지 쉽게 이해할 수 있도록 도와준다. 따라서, 결론은 DeleteMapping에선 @PathVariable 어노테이션을 사용하는 것이 일반적이다.

profile
노력하는 개미

0개의 댓글