Проверяет понимание идемпотентности HTTP-методов и их классификации, что важно для проектирования надёжных API.
Идемпотентность — это свойство операции, при котором её многократное выполнение эквивалентно однократному. В контексте HTTP это означает, что клиент может безопасно повторить запрос, не опасаясь нежелательных побочных эффектов. Это критически важно для надёжности сетевых взаимодействий, так как запросы могут теряться или дублироваться из-за сбоев сети.
Идемпотентные методы: GET, HEAD, PUT, DELETE, OPTIONS, TRACE. Они не изменяют состояние сервера или делают это одинаково при каждом вызове. Например, PUT заменяет ресурс целиком, поэтому повторная отправка того же тела приведёт к тому же состоянию. DELETE удаляет ресурс; повторное удаление несуществующего ресурса обычно возвращает ошибку, но состояние не меняется.
Неидемпотентные методы: POST и PATCH. POST создаёт новый ресурс, поэтому повторная отправка создаст несколько копий. PATCH частично изменяет ресурс, и повторное применение может привести к непредсказуемым результатам, если изменения не являются идемпотентными по своей природе.
// Идемпотентный PUT: повторная отправка безопасна
app.put('/users/:id', (req, res) => {
const user = { id: req.params.id, ...req.body };
db.save(user); // перезаписывает существующего пользователя
res.json(user);
});
// Неидемпотентный POST: каждый вызов создаёт нового пользователя
app.post('/users', (req, res) => {
const user = { id: generateId(), ...req.body };
db.insert(user);
res.status(201).json(user);
});Идемпотентность особенно важна при реализации повторных попыток (retry) в клиентах. Если клиент не получил ответ из-за таймаута, он может безопасно повторить идемпотентный запрос. Для неидемпотентных методов часто используют идемпотентные ключи (например, заголовок Idempotency-Key), чтобы сервер мог распознать повторные запросы.
Понимание идемпотентности помогает проектировать API, которые устойчивы к сетевым сбоям и повторным запросам. Используйте идемпотентные методы для операций, которые должны быть безопасными при повторе, и добавляйте механизмы идемпотентности для POST/PATCH, если это необходимо.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
Networks
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию