Ответ
Для удаления сущности в REST API используется HTTP-метод DELETE.
Ключевые характеристики:
- Идемпотентный: Повторные идентичные запросы к одному и тому же ресурсу приводят к одному и тому же результату (ресурс остаётся удалённым).
- Безопасный: Нет, метод изменяет состояние на сервере.
Типичная реализация и статусы ответа:
@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.deleteById(id);
return ResponseEntity.noContent().build(); // 204 No Content
}
- Успех (ресурс удалён): Возвращают статус
204 (No Content)без тела ответа. - Ресурс не найден: Можно вернуть
404 (Not Found). - Запрещено:
403 (Forbidden)или401 (Unauthorized).
Примечание: Для массового или условного удаления иногда используют POST с телом запроса, так как DELETE обычно не должен содержать тело.
Ответ 18+ 🔞
А, ну ты смотри, опять про эту вашу REST-ную магию. Ну ладно, слушай сюда, раз уж начал.
Вот представь, есть у тебя сущность, какая-нибудь, ну, пользователь там. И ты такой: "Нахуй его, этот ресурс, не нужон он мне больше!" Как ты с сервером это обсудишь? Правильно, методом DELETE. Это как прийти в гости и выкинуть нахуй чужой кактус с подоконника. Раз — и нет кактуса.
Что про него важно помнить, чтобы не облажаться:
- Идемпотентный, ёпта: Это умное слово значит, что если ты десять раз подряд нажмёшь кнопку "удалить Петю", то Петя удалится один раз, а не десять. После первого раза его уже нет, и следующие девять запросов просто упрутся в пустоту. Результат один и тот же — Пети нет. Удобно же, а?
- Безопасный? Да хуй там! Конечно нет. Это ж изменение, блядь. Состояние сервера поменялось — ресурс сгинул в небытие. Это не как
GET, который только смотрит.
Как это обычно выглядит в коде, если ты не совсем долбоёб:
@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.deleteById(id);
return ResponseEntity.noContent().build(); // 204 No Content
}
Смотри, что тут происходит: ты говоришь — "эй, сервак, удали юзера с таким-то айди". Сервисный слой идёт и делает свои грязные делишки в базе. А потом мы возвращаем ответ: 204 No Content. Это как кивнуть головой: "Всё, братан, сделано, Петю больше нет, даже говорить не о чем". Тела ответа нет — и не надо.
А если пошло по пизде? Ну, бывает:
- Ресурс не найден: Ты просишь удалить Петю с айди 999, а такого Пети никогда и не было. Можно вернуть
404 (Not Found). Типа, "чё удалять-то, мудила? Его нет!". - Запрещено: Ты — юзер, а пытаешься удалить админа. Сервер тебе:
403 (Forbidden)или401 (Unauthorized). "Иди нахуй, мелкий, не твоего ума дело".
И вот ещё важный момент, а то щас начнёшь выёбываться: Для массового удаления или сложных условий DELETE — не всегда царь и бог. Потому что по канонам, в DELETE не принято пихать тело запроса. Это как кричать "УБЕРИ ЭТО!" — не важно, как убрать, главное — убери. Поэтому если тебе надо удалить не просто по айди, а, например, всех, кто зарегался до вчера и имя которых начинается на "Ху", то часто используют POST на какой-нибудь /users/delete с телом, где эти условия описаны. Это уже такой, знаешь, читерский манёвр, но жизнь, блядь, сложная штука.
Короче, DELETE — это просто и ясно. Нашёл ресурс — пристрелил. Главное, целиться точно, а то по ошибке продакшен-базу почистишь, потом будешь охуевать.