← Назад к вопросам
Какие знаешь идемпотентные методы?
2.0 Middle🔥 141 комментариев
#API и сетевые протоколы#Архитектура и паттерны
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Идемпотентные методы HTTP
Идемпотентность — это свойство операции, при котором повторное выполнение дает тот же результат, что и первое выполнение. В контексте HTTP это критически важно для создания надежных API.
Безопасные и идемпотентные методы
GET
Самый идемпотентный метод. Запрашивает ресурс и не должен вызывать побочные эффекты:
GET /api/users/123
GET /api/users/123
HEAD
Аналог GET, но без тела ответа. Идемпотентен:
HEAD /api/users/123
PUT
Замещает весь ресурс — идемпотентен:
PUT /api/users/123 { "name": "John", "age": 30 }
PUT /api/users/123 { "name": "John", "age": 30 }
DELETE
Удаляет ресурс. Первый DELETE возвращает 204, второй — 404, но эффект идентичен.
PATCH (условно)
Частичное обновление. Идемпотентен только при правильной реализации.
Неидемпотентный метод: POST
POST часто используется для создания новых ресурсов:
POST /api/users
{ "name": "John", "email": "john@example.com" }
// Первый запрос: создан пользователь (ID: 1)
// Второй запрос: создан еще один пользователь (ID: 2)
Это опасно при сетевых ошибках. Решение — использовать Idempotency Key:
POST /api/payments
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
{ "amount": 100 }
Практическая реализация в Node.js
const idempotencyCache = new Map();
app.post('/api/payments', (req, res) => {
const idempotencyKey = req.headers['idempotency-key'];
if (!idempotencyKey) {
return res.status(400).json({ error: 'Idempotency-Key required' });
}
if (idempotencyCache.has(idempotencyKey)) {
return res.json(idempotencyCache.get(idempotencyKey));
}
const result = createPayment(req.body);
idempotencyCache.set(idempotencyKey, result);
res.json(result);
});
Почему это важно?
- Надежность — при потере соединения можно безопасно повторить запрос
- Консистентность — данные не дублируются
- User Experience — клиент может переправить запрос без опасения создать дубль
Идемпотентность — основа создания robust API систем.