HTTPQUERY
한국어

DELETE

사용법

DELETE 요청은 대상 리소스를 제거하라고 서버에 지시합니다. 제거가 실제로 무엇을 뜻하는지는 서버가 결정합니다. 리소스가 영구히 지워질 수도, 보관될 수도, 비활성으로 표시될 수도 있습니다.

REST API는 리소스 파기를 표현하는 데 DELETE에 크게 의존합니다. DELETE /api/users/123 같은 API 엔드포인트는 123으로 식별되는 사용자 레코드를 제거하겠다는 분명한 의도를 나타냅니다. 이는 생성·갱신·조회·파기 작업에 대한 PUT/POST/GET/DELETE 패턴에 그대로 대응됩니다.

HTML 폼은 GET과 POST만 지원합니다. fetch나 XMLHttpRequest 같은 JavaScript API는 DELETE를 기본으로 지원합니다. 일부 프레임워크는 우회책으로 _method=DELETE 매개변수를 담은 POST를 사용합니다.

서버는 결과에 따라 다음 상태 코드 중 하나로 응답합니다.

하드 삭제는 리소스를 영구히 제거합니다. 이후의 GET 요청은 404나 410 Gone을 반환합니다. 소프트 삭제는 기반 데이터를 제거하지 않고 리소스를 비활성으로 표시합니다. 그 리소스는 관리자 API를 통해서나 쿼리 매개변수를 써서 여전히 조회할 수 있습니다. 410은 영구적인 제거를 알리고, 404는 해당 URI에 리소스가 더 이상 존재하지 않을 때 적절합니다.

DELETE 요청은 멱등합니다. 같은 요청을 여러 번 보내도 서버 상태는 한 번 보냈을 때와 같습니다. 첫 요청이 리소스를 제거하고, 이후 요청은 추가적인 효과가 없습니다. 다만 응답 코드는 다를 수 있습니다. 첫 요청은 200 OK나 204 No Content를 반환하고, 이후 요청은 404 Not Found나 410 Gone을 반환합니다.

리소스 삭제

클라이언트가 특정 파일의 제거를 요청합니다. 서버는 파일을 제거하고 메시지 본문 없이 동작을 확인해 주는 204 No Content로 응답합니다.

요청

DELETE /uploads/report.pdf HTTP/1.1
Host: api.example.re

응답

HTTP/1.1 204 No Content

확인 응답을 포함한 REST API 삭제

REST API가 삭제를 확인해 주고 제거된 리소스를 식별하는 JSON 본문과 함께 200 OK를 반환합니다.

요청

DELETE /api/users/123 HTTP/1.1
Host: api.example.re
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...

응답

HTTP/1.1 200 OK
Content-Type: application/json

{"deleted": true, "id": 123}

대부분의 API가 파괴적인 작업을 허용하기 전에 인증을 요구하므로 Authorization 헤더에 bearer 토큰이 실려 있습니다.

CORS

교차 출처 DELETE 요청은 언제나 CORS 프리플라이트를 유발합니다. 브라우저는 서버가 대상 리소스에 DELETE를 허용하는지 확인하기 위해 먼저 OPTIONS 요청을 보냅니다.

요청 본문과 응답 본문

DELETE 요청에 본문을 포함할 수는 있지만 그 의미는 정의되어 있지 않습니다. 일부 중계자는 요청 스머글링 위험 때문에 본문이 있는 DELETE 요청을 거부합니다. 대부분의 API는 DELETE에 요청 본문을 사용하지 않습니다. 일괄 삭제처럼 본문이 필요한 경우에는 서버가 기대하는 형식을 정의합니다.

응답 본문은 상태 코드에 따라 달라집니다. 200 OK 응답에는 결과를 설명하거나 삭제된 리소스를 반환하는 본문이 포함됩니다. 204 No Content 응답은 본문 없이 삭제를 확인해 줍니다. 202 Accepted 응답은 삭제가 큐에 적재되었거나 진행 중임을 나타내며, 보통 상태 모니터로의 참조를 포함합니다.

응답 상태 코드

204 No Content는 본문이 필요 없는 단순한 삭제에서 가장 흔한 응답입니다. 서버가 삭제된 리소스나 확인 메시지를 응답 본문에 반환할 때는 200 OK가 적절합니다.

202 Accepted는 삭제가 큐에 적재되었거나 비동기임을 알립니다. 이 응답에는 보통 클라이언트가 진행 상황을 확인할 수 있는 상태 엔드포인트를 가리키는 Location 헤더나 본문이 포함됩니다.

삭제된 리소스에 대한 이후 요청은 404 Not Found나 410 Gone을 반환합니다. 410 응답은 그 리소스가 이전에 존재했고 의도적으로 제거되었음을 나타내는 반면, 404는 그런 구분을 두지 않습니다.