В современном веб-разработке операции удаления данных на сервере
выполняются с использованием HTTP метода DELETE. В
JavaScript DELETE-запросы часто применяются вместе с fetch
API или сторонними библиотеками вроде Axios. DELETE-запрос позволяет
указать серверу удалить ресурс, идентифицируемый уникальным
идентификатором или URI.
Метод fetch предоставляет гибкий способ отправки
DELETE-запросов:
fetch('https://api.example.com/items/123', {
method: 'DELETE',
})
.then(response => {
if (!response.ok) {
throw new Error(`Ошибка: ${response.status}`);
}
return response.json();
})
.then(data => console.log('Удалено:', data))
.catch(error => console.error('Ошибка запроса:', error));
Ключевые моменты:
method: 'DELETE' определяет тип запроса.response.ok позволяет обработать ошибки
сервера.204 No Content) или
содержать подтверждение удаления.По стандарту HTTP DELETE может содержать тело запроса, хотя многие серверы игнорируют его. Пример с телом запроса:
fetch('https://api.example.com/items', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ id: 123 })
})
.then(response => response.json())
.then(data => console.log('Удалено:', data))
.catch(error => console.error('Ошибка:', error));
Особенности:
Content-Type должен соответствовать типу передаваемых
данных.Библиотека Axios упрощает работу с DELETE-запросами:
import axios from 'axios';
axios.delete('https://api.example.com/items/123')
.then(response => console.log('Удалено:', response.data))
.catch(error => console.error('Ошибка:', error));
Для передачи тела запроса в Axios используется второй параметр:
axios.delete('https://api.example.com/items', { data: { ids: [1, 2, 3] } })
.then(response => console.log('Удалено:', response.data))
.catch(error => console.error('Ошибка:', error));
Важно:
Content-Type: application/json.fetch, в Axios тело DELETE-запроса
передается через ключ data.При DELETE-запросах сервер возвращает разные статус-коды, которые важно учитывать:
Проверка статуса ответа позволяет корректно информировать приложение о результате операции:
fetch('https://api.example.com/items/123', { method: 'DELETE' })
.then(response => {
switch (response.status) {
case 200:
case 204:
console.log('Удаление выполнено успешно');
break;
case 404:
console.warn('Ресурс не найден');
break;
default:
console.error('Ошибка сервера', response.status);
}
});
DELETE-запросы изменяют данные, поэтому необходимо учитывать безопасность:
В REST архитектуре DELETE-запрос ассоциируется с ресурсом, а не с действиями. Пример типичного REST DELETE:
DELETE /users/42
Массовое удаление через REST обычно реализуется как:
DELETE /users
Body: { "ids": [42, 43, 44] }
Для удаления нескольких элементов одновременно можно использовать
Promise.all:
const ids = [101, 102, 103];
const deletePromises = ids.map(id =>
fetch(`https://api.example.com/items/${id}`, { method: 'DELETE' })
);
Promise.all(deletePromises)
.then(results => results.forEach(res => console.log('Статус:', res.status)))
.catch(error => console.error('Ошибка при удалении:', error));
Такой подход позволяет отправлять несколько DELETE-запросов параллельно, экономя время и ресурсы.
Cache-Control: no-cache предотвращает это.DELETE-запросы в JavaScript — это мощный инструмент управления данными на сервере, требующий внимательного подхода к безопасности, обработке ошибок и соответствию REST принципам. Правильная работа с DELETE обеспечивает надежное удаление ресурсов и стабильность приложения.