Можно ли использовать POST для удаления?
Удаление — вещь интересная.
Вот представьте: раньше в банках хранились огромные папки клиентов. Клиенты отправляли курьеров передать подписанные документы, в банках кто-то принимал и подшивал документы в дело. Потом закрывался договор с клиентом, и папку передавали в архив архивариусу, а не отправляли сразу в шредер. А все потому, что законодательство регулирует необходимое время хранения документов, и это может быть 3–5 лет, а иногда и больше.
Потом все это переехало в электронный вид, появился электронный документооборот и ЭЦП, но законодательство в части хранения данных существенно не изменилось. Поэтому удалять вчерашнего клиента со всеми данными безвозвратно нельзя.
Можно использовать "мягкое удаление" и пометить клиента как неактивного. Информация по клиенту может переехать в архивные таблицы.
POST /client/delete
{
"clientId": 12345
}
На первый взгляд это выглядит странно. Ведь в REST для удаления существует метод DELETE:
DELETE /clients/12345
Но возникает вопрос: а что именно удаляется?
Если под удалением понимается не физическое удаление записи из базы данных, а выполнение бизнес-операции, то ситуация меняется. Часто за "удалением" скрывается целый процесс:
• перенос данных в архив;
• создание аудиторской записи;
• уведомление других систем;
• постановка задачи на последующее уничтожение данных по истечении срока хранения.
Фактически это уже не операция удаления записи.
В таких случаях использование POST логично:
POST /clients/12345/deactivate
или
POST /clients/12345/archive
или даже
POST /client/delete
{
"clientId": 12345,
"reason": "customer_request"
}
С точки зрения HTTP это не совсем канонический REST, зато хорошо отражает бизнес-смысл происходящего.
Поэтому ответ на вопрос "Можно ли использовать POST для удаления?" — да, можно.
Использование POST для удаления может быть оправдано, если под удалением скрывается сложный бизнес-процесс. Однако наличие soft delete само по себе не является причиной отказаться от метода DELETE. DELETE вполне может выполнять логическое удаление, архивирование и аудит внутри системы.
Главное, чтобы название API и его поведение были понятны всем участникам и после вас в команде осталась понятная документация об этом процессе.
Удаляли? Что использовали?
Post — 🙈
Delete — 😜
Полезно — ❤️
Post #307
1.71K
- ❤ 31
- 🤪 9
- 🙈 7