TGViewer
Анализ, коты, цветы и Катя Анализ, коты, цветы и Катя @analyticagain · 498 subscribers
Post #459 334
Телу у DELETE: быть или не быть?!

Часть 1️⃣

Конечно, утренний опрос был с подвохом 😬. Давайте разбираться

Как правило, метод DELETE в REST API реализовывается без тела запроса. А над каким объектом совершаем действие указываем в URI.

 DELETE /resource/{id}


❓Что говорят стандарты❓

😮‍💨 В диссертации Роя Филдинга (родоначальника REST API) я нашла главу про REST на HTTP, но отдельные методы он подробно не разбирает.

😮‍💨 В стандарте по семантике HTTP (RFC9110, раздел 9.3.5) указывается, что тело у DELETE может быть. 🤪Но с пометкой, что семантика не регламентирована, поэтому нет гарантий, что оно будет обработано. Более того, некоторые серверы могут такой запрос отклонить из-за рисков атак.

😮‍💨 В OpenAPI 2.0 тело запроса не предусмотрено. Сколько раз на меня ругались линтеры не хочется вспоминать. Но вот уже в 3.0 такая возможность есть. Хотя и с пометкой возможного отклонение сервисами.

😎 Таким образом получается, что тело в DELETE вполне может быть. Вопрос только зачем?! 😎

😊 Множественное удаление 😊

Вполне возможно, что вместо 100 вызовов, типа
DELETE /items/{id} 

вам будет удобнее делать один
DELETE /items
{
"id": [1, 2, 3, 4]
}


😊 Удаление связей или под-ресурсов 😊
Когда в выбранном объекте нужно удалить, какую то его часть.

У Spotify есть отличный пример: удаление треков из плейлиста. + интересная работа со Snapshot.


DELETE /playlists/{playlist_id}/tracks
{
"tracks": [
{ "uri": "string" }
],
"snapshot_id": "string"
}


😂Удаление с условиями😂
Когда удаление, должно произойти, только если выполнилось некоторое условие. Я о таком читала только в книге, поэтому если сталкивались на практике поделитесь.

Ну а мне нравится, как ElasticSearch решают эту задачу без использования тела запроса

😂Подпись на удаление😂

Как подтверждение. что есть права на такую операцию. Такие исключительные условия, когда не достаточно быть под учёткой с нужными правами.


DELETE /api/v3/userDataStream
{ "signature": "base64(hmac_sha256(secret, payload))" }



На практике тоже не встречала, но видела интересное обсуждение на форуме. В реальности, такой пример более «REST-канонично» можно реализовать, например как Binance.

Вероятно, могут быть другие кейсы. Я на практике использовала и встречала только 1 и 2. Поэтому если у вас есть такие из реальной практике поделитесь в комментариях 👀

Таким образом тело запроса у DELETE может быть, но важно понимать зачем это нужно, почему не подходят альтернативы, и какие риски это несет.

Как раз о рисках я расскажу в следующей части.

#СистемныйАнализ #интеграции #RESTAPI #OPENAPI
  • 🔥 6
  • 👍 4
More from @analyticagain
  1. Sep 24, 2026Посмотрите, какую картинку подготовил Андрей к занятию по OpenSpec. Милота неимоверная) Со…
  2. Sep 23, 2026Когда я вырасту создам свой брокер сообщений и назову его Упоротый кот. Причина инцидента?…
  3. Sep 22, 2026Без лишних слов: ко мне в команду ищут аналитика. Вакансия
  4. Sep 21, 2026OpenSpec: Понеслось От блога есть несомненный плюс он расширяет границы. Так, с подачи ком…
  5. Sep 18, 2026Обе стороны менторства Сегодня специально встала пораньше, чтобы подать заявку на программ…
  6. Aug 18, 2026Верните рутину Последнее время периодически ловлю уныние от работы: Много сложных, трудоём…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →