Можно ли использовать POST для удаления?
Да, можно. И очень часто — даже нужно.
Представьте старый банк: толстые папки с делами клиентов, курьеры с подписанными бумагами, архивариусы и полки, которые никто не имеет права сразу отправить в шредер. Почему? Потому что закон обязывает хранить документы 3, 5, а иногда и 10+ лет. С переходом на цифру мало что изменилось.
ЭЦП появилась, электронный документооборот тоже, а вот требования регуляторов к срокам хранения данных — почти нет. Поэтому «удалить клиента навсегда» в большинстве компаний просто невозможно. Что мы делаем на практике? Чаще всего применяем мягкое удаление (soft delete):- помечаем клиента как не активного, переносим данные в архивные таблицы, оставляем возможность восстановления. И вот тут возникает интересный момент с HTTP-методами.
Классический REST говорит:DELETE /clients/12345, но что на самом деле происходит за этим «удалением»? Обычно целый бизнес-процесс: перенос в архив, создание записи в аудите, уведомление связанных систем, запуск таймера на окончательное уничтожение данных через N лет, логирование причины удаления. Это уже не простое «убери строку из таблицы». Это операция, у которой есть смысл, причина, последствия и участники. Когда POST уместнее
httpPOST /clients/12345/deactivate
POST /clients/12345/archive
POST /client/delete
С телом: JSON{"clientId": 12345,"reason": "customer_request","comment": "Клиент попросил удалить все данные"}
Такой подход лучше отражает бизнес-смысл операции. Такой подход лучше отражает бизнес-смысл операции. Вывод для системных аналитиков
DELETE отлично работает, когда вы действительно хотите логического удаления и внутри сервиса всё делаете сами (soft delete + аудит).
POST становится предпочтительнее, когда «удаление» — это сложный orchestrated процесс с несколькими шагами, интеграциями и бизнес-правилами.
Главное правило:Название эндпоинта и его поведение должны быть понятны команде, разработчикам и тем, кто будет поддерживать систему после вас. Документация — ваш лучший друг.
А у вас как принято «удалять» сущности?
Пишете DELETE, используете POST /.../deactivate или придумали свой подход?Делитесь в комментариях — будет интересно сравнить практики из разных доменов (банки, e-commerce, SaaS и т.д.).