• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rest API metoda DELETE czy koniecznie musi usuwać zasób z bazy danych?

Mały hosting, OGROMNE możliwości
0 głosów
1,156 wizyt
pytanie zadane 17 kwietnia 2019 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)
Witam,

czy w metodzie DELETE zamiast usuwania rekordu z bazy danych mogę np zmienić wartość w kolumnie isActive na 0, czy powinienem to raczej dodać do metody PUT?

3 odpowiedzi

+3 głosów
odpowiedź 17 kwietnia 2019 przez Tomek Sochacki Ekspert (227,510 p.)
metody są tylko pewną umową. Technicznie mógłbyś akcję usuwania rekordu zrobić i na GET ale oczywiście nie będzie to dobrą praktyką.

Wystawienie w API metody DELETE informuje jej konsumenta, że tym endpointem z tą metodą może dokonać usunięcia rekordu. Nie interesuje go natomiast jak to wygląda technicznie pod spodem. Możesz usunąć rekord trwale albo zrobić tzw. soft delete, to już zależy od Ciebie, konsumenta endpointu to kompletnie nie interesuje. On oczekuje, że gdy wywoła POST, potem GET to dostanie rekord, a gdy wywoła potem DELETE i znowu GET to rekordu już nie otrzyma. Ale to czy rekord jest nadal w bazie czy nie to już nie ma znaczenia.

A tak na marginesie to w 90% przypadków prawdopodobnie lepszy będzie soft delete. Pamiętaj, że najcenniejsza jest dzisiaj informacja. Dyski, ram itp. możesz w każdej chwili dokupić ale z informacji raz straconej możesz nie odzyskać... Takie trwałe usuwanie może mieć uzasadnienie w jakiś konkretnych sytuacjach ale raczej w BigData, a w mikro bazach gdzie masz kilka czy kilkanaście tysięcy rekordów to nie ma kompletnie sensu.
komentarz 17 kwietnia 2019 przez `Krzychuu Stary wyjadacz (13,940 p.)
dokładnie chce zrobić tak jak napisałeś że gdy wywoła DELETE i potem GET to dostanie błąd że nie odnaleziono rekordu, dziękuje za pomoc
+2 głosów
odpowiedź 17 kwietnia 2019 przez niezalogowany

Do tego powinno stosować się PUT.

Ale jeśli użył byś DELETE i zmienił isActive na 0. Potem użył byś GET z tym samym urlem, żeby pobrać ten sam zasób i w odpowiedzi otrzymał 404, to by to jeszcze można było uznać, że jest to ok.

komentarz 17 kwietnia 2019 przez `Krzychuu Stary wyjadacz (13,940 p.)
chce zrobić dokładnie tak jak napisałeś, dziękuje za pomoc
+1 głos
odpowiedź 17 kwietnia 2019 przez wiktoz Mądrala (7,060 p.)
DELETE po prostu usuwa, a Ty nie chcesz usunąć tego tylko zamienić wartość na 0. To są dwie różne rzeczy.
komentarz 17 kwietnia 2019 przez adrian17 Mentor (354,880 p.)
DELETE usuwa z punktu widzenia API. Jeśli ustawienie bazodanowo isActive na 0 wygląda dla zewnętrznego użytkownika API tak samo jak usunięcie rekordu, to pasuje.
komentarz 17 kwietnia 2019 przez `Krzychuu Stary wyjadacz (13,940 p.)

@wiktoz, właśnie z tym miałem problem ale mam już napisane w funkcji pobierające że jeżeli jest isActive na 0 to zwraca błąd, czyli tak jakby DELETE będzie usuwać rekord i nie będzie go można pobrać z poziomu API

Podobne pytania

0 głosów
1 odpowiedź 828 wizyt
0 głosów
4 odpowiedzi 4,086 wizyt
0 głosów
2 odpowiedzi 833 wizyt

93,715 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,258 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...