Вопрос проверяет понимание различий между HTTP-методами PATCH и PUT и подходов к их обработке на сервере, что необходимо для корректного проектирования RESTful API.
HTTP-методы PUT и PATCH используются для обновления ресурсов в RESTful API, но имеют фундаментальные различия в семантике, что определяет подходы к их обработке на сервере.
Метод PUT является идемпотентным и предназначен для полной замены ресурса. Клиент должен отправить представление ресурса целиком. Если какие-то поля опущены, сервер может интерпретировать это как их удаление или установку в значения по умолчанию.
Метод PATCH предназначен для частичного обновления ресурса. Клиент отправляет только те поля, которые необходимо изменить. Это не идемпотентный метод по умолчанию, хотя реализация может сделать его таковым.
Обработка PUT обычно прямолинейна:
Обработка PATCH сложнее, так как требует определения стратегии применения изменений. Основные подходы:
null.null или специальные флаги для удаления).// Обработчик PATCH для ресурса /users/:id
app.patch('/users/:id', async (req, res) => {
const userId = req.params.id;
const updates = req.body; // Только изменяемые поля
// 1. Получаем текущего пользователя
const currentUser = await User.findById(userId);
if (!currentUser) return res.status(404).json({ error: 'User not found' });
// 2. Применяем обновления (слияние)
// Игнорируем попытки изменить ID или другие защищённые поля
const allowedUpdates = ['name', 'email', 'age'];
for (const key of allowedUpdates) {
if (updates.hasOwnProperty(key)) {
// Если значение null, удаляем поле (или оставляем как есть)
if (updates[key] === null) {
delete currentUser[key];
} else {
currentUser[key] = updates[key];
}
}
}
// 3. Валидация и сохранение
try {
await currentUser.save();
res.json(currentUser);
} catch (error) {
res.status(400).json({ error: error.message });
}
});Вывод: Используйте PUT, когда логика требует полной замены ресурса и клиент может легко получить все его данные. PATCH предпочтительнее для экономии трафика и атомарного обновления отдельных полей, особенно в мобильных приложениях или при работе с большими объектами. Для сложных сценариев обновления рекомендуется стандарт JSON Patch.
Уровень
Рейтинг:
3
Сложность:
4
Навыки
Node.js
Express
Ключевые слова
Подпишись на Python Developer в телеграм