2012-11-04 18 views
5

Załóżmy, że mam zasób o nazwie "Sesja". Klient wywoływał PUT w celu utworzenia i rozpoczęcia nowej sesji. Gdy klient zakończy sesję, nie powinien już być dostępny, ale powinien pozostać z powodów historycznych/odpowiedzialności.Metody HTTP: DELETE vs POST

Aby zakończyć sesję, czy lepiej byłoby wydać polecenie DELETE, które wydaje się semantycznie bliższe żądanemu efektowi, lub POST, ponieważ zasób nie jest faktycznie trwale usuwany?

Odpowiedz

5

Pytanie tutaj brzmi: Czy wniosek jest następujący: idempotent? Jeśli wykonasz tę samą prośbę dwukrotnie, czy ma ona efekt uboczny? Podobnie jak przy zamawianiu artykułu, dwukrotne wykonanie zlecenia zlecenia spowoduje przesłanie artykułu.

W takim przypadku potrzebna jest metoda POST. Jeśli nie, to potrzebujesz PUT lub DELETE.

Ponieważ nie wydaje się, aby usunąć sesję, zmiana jej stanu, PUT byłaby lepszą metodą, ponieważ oznacza, że ​​zasób jest zmieniony, a nie usunięty, co ma miejsce w twoim przypadku.

Edit:

Jeśli zasób wydaje się być usuwane z klientem, DELETE wydaje się bardziej odpowiedni. To, jak rzeczy są wdrażane z tyłu, nie ma znaczenia dla klienta.

+0

Co zrobić, jeśli zasób "pojawia się", aby zostać usunięty, z perspektywy klienta? W moim przykładzie żądanie byłoby idempotentne, ponieważ wywołanie go po raz drugi nie powodowałoby żadnych skutków ubocznych, a wysłanie żądania GET w sesji zakończyłoby się niepowodzeniem. –

0

Żądanie POST będzie tu lepsze, ponieważ w rzeczywistości nie usuniesz session. Żądania POST są często używane do zmiany stanu obiektu. Myślę, że to twój przypadek.