2012-11-04 19 views
5

Diciamo che ho una risorsa chiamata "Session". Il client chiamerebbe PUT per creare e iniziare una nuova sessione. Quando il client ha terminato la sessione, non dovrebbe più essere accessibile, ma dovrebbe persistere per ragioni storiche/di responsabilità.Metodi HTTP: DELETE vs POST

Per terminare la sessione, sarebbe più appropriato emettere una richiesta DELETE, che sembrerebbe semanticamente più vicina all'effetto desiderato, o POST, visto che la risorsa non viene effettivamente rimossa in modo permanente?

risposta

5

La domanda qui è: è la richiesta idempotent? Se si esegue la stessa richiesta due volte, ha un effetto collaterale? Come quando ordinate un articolo, eseguendo due volte la richiesta d'ordine otterreste l'articolo due volte.

In tal caso, POST è il metodo desiderato. In caso contrario, si desidera sia PUT o DELETE.

Come lei non sembra essere l'eliminazione della sessione, solo alterare il suo stato, PUT sarebbe un metodo migliore, perché significa che la risorsa è alterato, e non cancellato, che è il caso nel tuo caso.

Edit:

Se la risorsa sembra essere eliminati dal client, DELETE sembra più appropriato. Il modo in cui le cose vengono implementate nella parte posteriore non ha importanza per il cliente.

+0

Cosa succede se la risorsa "appare" per essere cancellata, dal punto di vista del cliente? Nel mio esempio, la richiesta sarebbe idempotente, perché chiamarla una seconda volta non avrebbe alcun effetto collaterale e l'emissione di una richiesta GET sulla sessione fallirebbe. –

0

La richiesta POST sarà migliore qui in quanto non si elimina effettivamente il session. Le richieste POST vengono spesso utilizzate per modificare lo stato di un oggetto. Penso che sia il tuo caso.