Czy jest coś innego niż REST w podawaniu parametrów w żądaniu HTTP DELETE?
Mój scenariusz jest taki, że modeluję „Czy na pewno chcesz to usunąć?” scenariusz. W niektórych przypadkach stan zasobu sugeruje, że żądane usunięcie może być nieprawidłowe. Prawdopodobnie możesz sobie wyobrazić scenariusze, w których wymagane jest potwierdzenie usunięcia
Rozwiązaniem, które przyjęliśmy, jest przekazanie parametru do żądania usunięcia, aby wskazać, że można kontynuować usuwanie („? Force_delete = true”)
na przykład
DELETE http://server/resource/id?force_delete=true
Uważam, że od:
(a) Semantyka DELETE nie jest zmieniana - użytkownik nadal może wysłać normalne żądanie DELETE, ale może się to nie udać z 409, a treść odpowiedzi wyjaśni dlaczego. Mówię, że może się nie powieść, ponieważ (z powodów nie wartych wyjaśnienia) w niektórych przypadkach nie ma powodu, aby monitować użytkownika.
(b) W rozprawie Roya nic nie sugeruje, że jest to sprzeczne z duchem REST - dlaczego miałoby istnieć, skoro HTTP jest tylko jedną implementacją REST, więc dlaczego przekazywanie parametrów HTTP ma znaczenie
Czy ktoś może wskazać mi ostateczne stwierdzenie, które wyjaśnia powód, dla którego nie jest to RESTful?
W przypadku pokrewnego pytania, jeśli użytkownik nie określi force_delete, to zwracam 409 Conflict
- czy to jest najbardziej odpowiedni kod odpowiedzi?
Zagryźć
Po dalszych badaniach myślę, że dodanie parametrów do DELETE może naruszyć kilka zasad.
Po pierwsze, implementacja prawdopodobnie narusza „Uniform Interface” (patrz sekcja 5.1.5 rozprawy Roya
Dodając „force_delete” dodajemy dodatkowe ograniczenie do już dobrze zdefiniowanej metody DELETE. To ograniczenie ma znaczenie tylko dla nas.
Można również argumentować, że narusza to „5.1.2 klient-serwer”, ponieważ okno dialogowe potwierdzenia dotyczy naprawdę interfejsu użytkownika i znowu nie wszyscy klienci będą chcieli potwierdzić usunięcie.
Sugestie ktoś?