Ответ
Идемпотентные HTTP-методы — это методы, при повторении которых с одинаковыми параметрами состояние системы не изменяется, а результат остаётся тем же. Это критически важно для обеспечения надёжности и предсказуемости API, особенно при сбоях сети, когда клиент может повторно отправить запрос.
Основные идемпотентные методы:
GET: Используется только для получения данных. Многократные вызовы не должны влиять на состояние ресурса.PUT: Полностью заменяет ресурс по указанному URI. Повторный вызов с теми же данными не изменит итоговое состояние системы.DELETE: Удаляет ресурс. После первого успешного вызова ресурс удалён, а последующие вызовы возвращают тот же результат (например,404или410), не изменяя состояние.HEAD: АналогиченGET, но сервер возвращает только заголовки ответа без тела.
Пример идемпотентного PUT в Node.js (Express):
app.put('/api/users/:id', async (req, res) => {
const { id } = req.params;
const userData = req.body;
// Операция "создать или полностью заменить"
const updatedUser = await User.findOneAndUpdate(
{ _id: id },
userData,
{ upsert: true, new: true, runValidators: true }
);
res.json(updatedUser);
});
// Повторный вызов PUT /api/users/123 с теми же данными даст идентичный результат.
Неидемпотентные методы: POST (создаёт новый ресурс при каждом вызове) и PATCH (может применяться неидемпотентно, если операция не является чистой заменой, например, инкремент счётчика).