TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.52K subscribers
Post #422 1.58K
Недавно знакомый разработчик ходил на собеседование, и там его спросили:

"Что такое идемпотентность?"


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

Хотя знакомый понимал смысл термина, готовой формулировки у него не было, начал объяснять, немного запутался. Ему повезло с собеседующим, тот послушал объяснение и понял, что человек ориентируется в теме, даже помог наводящими вопросами.

Но я тоже сталкивалась, когда на этот вопрос отвечают не совсем то, что нужно. Давайте разберемся с этим определением.

❌ Идемпотентность - это когда при повторных запросах приходит один и тот же ответ.

Нет, дело тут не в ответах, они могут отличаться.

Классический пример с DELETE: первый запрос на удаление может вернуть 200, а следующий - 404, при этом метод остается идемпотентным.

Или другой пример:

Идемпотентный GET не обязан каждый раз возвращать одинаковый ответ, между запросами данные в системе могли измениться (например, добавились записи в список), и второй ответ будет отличаться.

❌ Идемпотентность - это когда повторный запрос не выполняется.

Нет, повторный запрос может точно так же пройти через приложение и обратиться к БД. Идемпотентность не означает, что система обязана распознать дубль и проигнорировать его. Дедупликация - один из способов обеспечить идемпотентность, но не сама идемпотентность. Для некоторых ситуаций нужна дедупликация, а для GET-запроса, например, совершенно нормально повторно выполнить те же действия.

✅ Идемпотентность - это свойство операции, при котором многократное выполнение этой операции приводит к такому же эффекту, как и однократное выполнение.

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

А зачем вообще нужна идемпотентность? Почему о ней так много говорят?

Практический смысл этого свойства хорошо виден при ретраях. Например, из-за сетевого сбоя клиент не получил ответ и не знает, был ли первый запрос обработан. Если операция идемпотентна, запрос можно безопасно повторить.

Сюда же повторная доставка сообщений из Кафки, когда обработать успели, а закоммитить оффсет не успели.

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

Например, когда реализуем поиск с фильтрами:

POST /orders/search
{...}

Или когда генерируем на клиенте и передаем на бэк специальный уникальный идентификатор запроса - Idempotency-Key.

Когда такой запрос приходит первый раз, бэк его обрабатывает, а уникальный Idempotency-Key сохраняет. При повторном запросе с тем же Idempotency-Key бэк понимает, что это дубль, и бизнес-операцию повторять не нужно. Например, при запросе на списание платежа, при заказе такси и др.

Итого краткий ответ:

Идемпотентность — это свойство операции, при котором многократное выполнение этой операции приводит к такому же эффекту, как и однократное выполнение.

А дальше можно привести примеры идемпотентных и неидемпотентных операций, чтобы развернуть мысль.

А вас спрашивали на собесах определение идемпотентности?
  • 👍 37
  • ❤ 20
  • 🔥 12
  • ❤‍🔥 2
  • 🤣 2
More from @jane_yanchenko
  1. Oct 8, 2026Redis vs Valkey По моим ощущениям про Valkey стали говорить всё больше, решила сделать неб…
  2. Oct 7, 2026Недавно рассказывала про Avito.Tech.Conf — конференцию для лидов и менеджеров. На выходных…
  3. Sep 30, 2026Представьте ситуацию. Дисклеймер: пример вымышленный, проблема реально встречающаяся 🐤 Вы…
  4. Sep 25, 2026В прошлой жизни, когда я была менеджером проектов, одним из первых мест работы у меня был…
  5. Sep 23, 2026Куда пропало обращение - развязка В прошлом посте у нас загадочно пропало обращение 58122.…
  6. Sep 23, 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 →