Sobes.tech
Middle

Czy operacja DELETE jest idempotentna?

sobes.tech AI

Odpowiedź od AI

Tak, to jest. Wielokrotne wykonanie operacji DELETE z tym samym URI doprowadzi do tego samego końcowego stanu zasobu — jego braku. W przypadku pierwszego żądania zasób zostanie usunięty. W kolejnych żądaniach zasób już nie będzie istniał, ale wynik (brak zasobu) pozostanie taki sam.

// Przykład idempotentnej operacji DELETE z użyciem HttpClient
using System.Net.Http;
using System.Threading.Tasks;

public class ResourceServiceClient
{
    private readonly HttpClient _httpClient;

    public ResourceServiceClient(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }

    public async Task DeleteResourceAsync(int resourceId)
    {
        var response = await _httpClient.DeleteAsync($"api/resources/{resourceId}");
        // Nawet jeśli zasób został już usunięty (np. zwraca 404 Not Found),
        // końcowy rezultat (brak zasobu) będzie taki sam.
        response.EnsureSuccessStatusCode(); // Może rzucić wyjątkiem dla statusów innych niż sukces (2xx)
                                            // Aby sprawdzić idempotentność, można obsługiwać statusy bardziej elastycznie.
    }
}