Что такое HTTP-метод DELETE?

«Что такое HTTP-метод DELETE?» — вопрос из категории Сети, который задают на 28% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DELETE — это идемпотентный HTTP-метод, предназначенный для удаления указанного ресурса на сервере. Идемпотентность означает, что несколько идентичных запросов должны приводить к одному и тому же результату (после первого удаления ресурса последующие запросы вернут 404 Not Found).

Семантика и коды состояния

  • 204 No Content: Успешное удаление. Тело ответа обычно отсутствует.
  • 200 OK: Успешное удаление, сервер может вернуть информацию об удаленном ресурсе в теле.
  • 202 Accepted: Запрос принят на обработку, но она еще не завершена.
  • 404 Not Found: Удаляемый ресурс не найден.
  • 403 Forbidden / 401 Unauthorized: Недостаточно прав для выполнения операции.

Пример реализации

Клиент на C# (HttpClient):

public async Task<bool> DeleteUserAsync(int userId)
{
    using var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _token);

    var response = await httpClient.DeleteAsync($"https://api.example.com/users/{userId}");

    if (response.StatusCode == HttpStatusCode.NoContent)
    {
        Console.WriteLine($"User {userId} deleted successfully.");
        return true;
    }
    // Обработка ошибок (404, 403 и т.д.)
    return false;
}

Сервер на ASP.NET Core (Minimal API):

app.MapDelete("/users/{id:int}", async (int id, AppDbContext dbContext) =>
{
    var user = await dbContext.Users.FindAsync(id);
    if (user is null) return Results.NotFound();

    dbContext.Users.Remove(user);
    await dbContext.SaveChangesAsync();

    return Results.NoContent(); // Статус 204
});

Важные аспекты безопасности

  • Всегда проверяйте авторизацию. DELETE-запросы должны быть доступны только аутентифицированным и авторизованным пользователям.
  • Реализуйте мягкое удаление (soft delete) через флаг IsDeleted, если данные могут потребоваться для аудита или восстановления.
  • Избегайте уязвимостей, таких как массовое удаление (например, DELETE /users без ID). Операции удаления должны быть точечными.