Ответ
Идемпотентный HTTP-метод — это метод, многократное выполнение которого с одними и теми же данными приводит к одинаковому результату, как если бы он был выполнен один раз. Это свойство критично для надежности сетевых взаимодействий (например, автоматические повторы запросов).
Идемпотентные методы:
- GET — получение ресурса. Не изменяет состояние сервера.
- HEAD — аналогичен GET, но возвращает только заголовки.
- PUT — полное обновление ресурса. Повторные запросы с тем же телом не изменяют итоговое состояние.
- DELETE — удаление ресурса. После первого успешного удаления ресурс отсутствует, и последующие запросы не меняют это состояние.
- OPTIONS — получение информации о поддерживаемых методах.
Неидемпотентные методы:
- POST — создание ресурса. Каждый вызов обычно создает новый объект.
- PATCH — частичное обновление. Результат может зависеть от текущего состояния ресурса.
Пример идемпотентности PUT:
PUT /api/users/123 HTTP/1.1
Content-Type: application/json
{"name": "Alice", "email": "alice@example.com"}
Повторная отправка этого же запроса несколько раз оставит пользователя с ID 123 в том же состоянии (name: Alice, email: alice@example.com), что и после первого выполнения.
Ответ 18+ 🔞
Да ты посмотри, какая, блядь, наука развелась! Идемпотентность, сука! Звучит как диагноз, а на деле простая, в общем-то, хуйня.
Вот представь: ты нажимаешь кнопку в лифте на пятый этаж. Раз нажал — поехал. Десять раз нажал — всё равно на пятом и окажешься, а не на черт знает каком. Это и есть идемпотентность, ёпта! Один запрос или сто — итог-то, сука, одинаковый.
А теперь смотри, какие HTTP-методы у нас такие правильные, идемпотентные, блядь:
- GET — это как посмотреть в холодильник. Смотришь раз, смотришь десять — колбаса сама по себе не сожрётся. Состояние не меняется.
- HEAD — тот же просмотр, но ты, блядь, только дверцу приоткрыл, заглянул одним глазом и закрыл. Суть та же.
- PUT — вот это мощно! Это как взять и полностью переписать, блядь, анкету сотрудника. Написал: «Вася Пупкин, дворник». Отправил. Передумал? Снова отправил: «Вася Пупкин, дворник». Хуй с ним, пусть так и будет. Десять раз отправишь — в итоге он так и останется дворником. Не превратится же он в директора от количества запросов!
- DELETE — ну тут вообще пиздец просто. Удалил файл — он в корзине. Ещё раз отправил DELETE — ну и что? Его уже нет! Удалять нечего, состояние системы не поменялось. Удалил и удалил, блядь.
- OPTIONS — это спросить у системы: «А на что ты, сука, вообще способна?». Спросил раз, спросил два — ответ не изменится, пока кто-то код не перепишет.
А вот два товарища, с которыми, блядь, надо осторожно — они не идемпотентные, подлые:
- POST — это каждый раз, сука, как нового ребёнка зачать. Отправил запрос — на сервере новый заказ родился. Отправил второй раз с теми же данными — охуеть, у тебя уже два одинаковых заказа! Вот тебе и повторение, мать его.
- PATCH — хитрая, блядь, жопа. Частичное обновление. Это как сказать: «Добавь к моей зарплате 100 рублей». Отправил раз — стало +100. Отправил второй, думая, что «ничего не изменится» — а там уже +200! Вот так и живём, в рот меня чих-пых.
Ну и пример, чтобы совсем, блядь, мозг не взорвался. Смотри на этот PUT:
PUT /api/users/123 HTTP/1.1
Content-Type: application/json
{"name": "Alice", "email": "alice@example.com"}
Отправил его — пользователь стал Алисой. Отправил его ещё раз, потому что сеть глючная или ты просто, блядь, параноик — он всё равно останется Алисой. Не станет же он Бобом от твоего упорства! Вот и вся магия, ёперный театр. Главное — не путать с POST, а то насоздаёшь сущностей, овердохуища.