Cytat z mojej innej odpowiedzi tutaj :
Historycznie rzecz biorąc, specyfikacja RFC 2616, opublikowana w 1999 r., Była najczęściej wymienianą specyfikacją HTTP 1.1. Niestety jego opis idempotencji był niejasny , co pozostawia miejsce na wszystkie te debaty. Ale ta specyfikacja została zastąpiona przez RFC 7231. Cytat z RFC 7231, sekcja 4.2.2 Idempotent Methods , wyróżnienie moje:
Metoda żądania jest uważana za „idempotentną”, jeśli zamierzony WPŁYW NA SERWER wielu identycznych żądań z tą metodą jest taki sam, jak skutek dla pojedynczego takiego żądania. Spośród metod żądań zdefiniowanych w tej specyfikacji metody PUT, DELETE i bezpieczne żądania
są idempotentne .
Tak więc jest napisane w specyfikacji, idempotencja dotyczy wpływu na serwer. Pierwsze DELETE zwracające 204, a następnie DELETE zwracające 404, taki inny kod stanu NIE powoduje, że DELETE nie jest idempotentny. Użycie tego argumentu do uzasadnienia kolejnego zwrotu 204 jest po prostu nieistotne.
OK, więc nie chodzi o idempotencję. Ale w takim razie pytanie uzupełniające może brzmieć, co jeśli nadal zdecydujemy się użyć 204 w kolejnym DELETE? Czy to jest w porządku?
Dobre pytanie. Motywacja jest zrozumiała: pozwolić klientowi na osiągnięcie zamierzonego wyniku, bez martwienia się o obsługę błędów. Powiedziałbym, że zwrócenie 204 w kolejnym DELETE jest w dużej mierze nieszkodliwym „białym kłamstwem” po stronie serwera, którego strona klienta nie zauważy od razu różnicy. Dlatego są ludzie, którzy robią to na wolności i nadal działa. Pamiętaj tylko, że takie kłamstwo można uznać za dziwne semantycznie, ponieważ „GET / non-exist” zwraca 404, ale „DELETE / non-exist” daje 204, w tym momencie klient zorientowałby się, że Twoja usługa nie jest w pełni zgodna sekcja 6.5.4 404 nie znaleziono .
Ale z drugiej strony, zamierzony sposób wskazany przez RFC 7231, tj. Zwrócenie 404 przy kolejnym DELETE, nie powinien być problemem w pierwszej kolejności. Wielu innych programistów zdecydowało się to zrobić. Jest tak prawdopodobnie dlatego, że każdy klient, który implementuje HTTP DELETE (lub jakąkolwiek metodę HTTP, jeśli o to chodzi), nie założyłby ślepo, że wynik zawsze będzie pomyślny 2xx. A potem, gdy programista zacznie rozważać obsługę błędów, błąd 404 Not Found byłby jednym z pierwszych błędów, jakie przyjdą na myśl. W tym momencie, mam nadzieję, wyciągnąłby wniosek, że zignorowanie błędu 404 jest semantycznie bezpieczne dla operacji HTTP DELETE. Problem rozwiązany.