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

«Что такое идемпотентность» — вопрос из категории Сети, который задают на 54% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Идемпотентность в контексте HTTP и проектирования API — это свойство операции, при котором её многократное выполнение с одними и теми же входными данными приводит к одинаковому результату и состоянию системы, как и после первого выполнения.

Ключевой момент: Идемпотентность — о состоянии системы, а не о коде ответа. Ответ сервера (например, статус 404 после первого удаления и 200 после второго) может отличаться, но итоговое состояние ресурса на сервере должно быть таким же.

Классификация HTTP-методов с точки зрения идемпотентности:

Метод Идемпотентен? Почему Пример для REST API (Node.js + Express)
GET Да Только получение данных, не изменяет состояние. app.get('/users/:id', handler) — многократные вызовы не создадут новых пользователей.
PUT Да Полная замена ресурса. Повторный запрос с теми же данными оставит ресурс в том же конечном состоянии. app.put('/users/:id', handler) — обновит пользователя. Второй идентичный запрос не изменит результат.
DELETE Да Удаление ресурса. После первого успешного удаления ресурса его больше нет, последующие запросы также вернут 404 или 410, но состояние системы (отсутствие ресурса) не изменится. app.delete('/users/:id', handler)
POST Нет Создание нового ресурса. Каждый вызов обычно создает новый объект, изменяя состояние системы. app.post('/users', handler) — каждый запрос создаст нового пользователя с новым ID.
PATCH Нет (чаще всего) Частичное обновление. Может быть идемпотентным, если операция сама по себе идемпотентна (например, установка поля в конкретное значение), но в общем случае — нет. Неидентичный PATCH: { "op": "increment", "path": "/views", "value": 1 }

Зачем это важно в Node.js бэкенде? Для обеспечения надежности. Сетевые сбои или таймауты могут приводить к повторной отправке запросов клиентом. Идемпотентные операции (PUT, DELETE) безопасны для такого повтора. Для неидемпотентных (POST) нужно реализовывать механизмы предотвращения дублирования (idempotency keys).

Видео-ответы