Ответ
DELETE — это один из стандартных HTTP-методов (или "глаголов"), предназначенный для удаления указанного ресурса на сервере.
Ключевые характеристики:
- Идемпотентность: Многократное выполнение одного и того же DELETE-запроса к одному ресурсу должно приводить к одному и тому же результату — ресурс удален. Второй и последующие запросы обычно возвращают
404 Not Foundили410 Gone. - Безопасность: НЕТ. DELETE изменяет состояние на сервере.
- Ответ сервера: При успешном удалении сервер может вернуть:
200 OKс телом ответа, содержащим статус операции.202 Accepted— запрос принят, но обработка еще не завершена.204 No Content(наиболее распространенный) — успешно обработан, тело ответа отсутствует.
Пример реализации DELETE-запроса в Swift с использованием URLSession:
func deleteResource(withId id: String, completion: @escaping (Result<Void, Error>) -> Void) {
// 1. Формирование URL для конкретного ресурса.
guard let url = URL(string: "https://api.example.com/posts/(id)") else {
completion(.failure(URLError(.badURL)))
return
}
// 2. Создание запроса с методом DELETE.
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
// При необходимости добавляем заголовки, например, для аутентификации.
request.setValue("Bearer YOUR_TOKEN", forHTTPHeaderField: "Authorization")
// 3. Создание и запуск data task.
let task = URLSession.shared.dataTask(with: request) { data, response, error in
// 4. Обработка ошибки сети.
if let error = error {
DispatchQueue.main.async { completion(.failure(error)) }
return
}
// 5. Проверка HTTP статус-кода.
guard let httpResponse = response as? HTTPURLResponse else {
DispatchQueue.main.async { completion(.failure(URLError(.cannotParseResponse))) }
return
}
switch httpResponse.statusCode {
case 200, 202, 204:
// Успешное удаление.
DispatchQueue.main.async { completion(.success(())) }
case 404:
DispatchQueue.main.async { completion(.failure(URLError(.resourceUnavailable))) }
case 401, 403:
DispatchQueue.main.async { completion(.failure(URLError(.userAuthenticationRequired))) }
default:
let error = URLError(.badServerResponse, userInfo: [NSLocalizedDescriptionKey: "Unexpected status code: (httpResponse.statusCode)"])
DispatchQueue.main.async { completion(.failure(error)) }
}
}
task.resume() // Запуск запроса.
}
// Использование функции.
deleteResource(withId: "123") { result in
switch result {
case .success:
print("Ресурс успешно удален.")
// Обновить UI (например, удалить строку из таблицы).
case .failure(let error):
print("Ошибка при удалении: (error.localizedDescription)")
// Показать alert с ошибкой.
}
}
Важно: Фактическое удаление данных (или их пометка как удаленные) полностью зависит от реализации серверного API. Клиент лишь отправляет запрос.