2013-08-23 121 views
39

Sto sviluppando il servizio WCF di REST e, come teoricamente, so quando optare per quale scopo.Qual è la differenza tra i metodi HTTP GET, POST, PUT e DELETE

  • GET per ottenere la risorsa
  • PUT aggiornare
  • POST per inserire
  • DELETE eliminare

Ma qual è lo svantaggio, se non seguiamo questa regola di cui sopra, supponiamo di inserire un record che ho usato il metodo GET?

+2

C'è una ragione per cui vorresti farlo? –

+1

Non so perché dovremmo seguire la regola precedente, se non seguiamo allora quali sono gli svantaggi? – Fooker

+0

Convenzione. Prevedibilità. Perché dovresti guidare sul lato sinistro della strada (lato destro, negli Stati Uniti)? –

risposta

10

Ma quale è lo svantaggio se non si segue questa regola precedente, si supponga di inserire un record utilizzando il metodo GET.

I motori di ricerca accedono alle tue pagine utilizzando le richieste GET, quindi se hai fatto questo, il crawler di Google potrebbe inserire record che non volevi.

Spesso, le persone utilizzano il POST per qualsiasi tipo di richiesta Ajax, con l'azione effettiva nel corpo della richiesta. Non c'è niente di molto sbagliato in questo, ma la funzione è lì per te da usare, quindi potresti anche usarlo.

48

Poiché il metodo GET HTTP è specificato come idempotente, una richiesta GET, per specifica, può essere nuovamente inviata con l'assunzione che non cambierà nulla sul server. Questo non è il caso di un POST HTTP che, in base alle specifiche, può modificare lo stato dell'applicazione in esecuzione sul server.

Quindi, per specifica, è possibile eseguire un GET HTTP su una pagina N numero di volte senza preoccuparsi di cambiarne lo stato.

Il mancato rispetto delle specifiche potrebbe avere vari risultati indesiderati. Ad esempio, i crawler Web seguono la richiesta GET per indicizzare un sito, ma non POST. Se si consente a una richiesta HTTP GET di apportare modifiche al database, è possibile comprendere facilmente l'implicazione indesiderata che può avere.

Rispettare una specifica è come rispettare un accordo tra il vostro servizio o sito Web e una serie di consumatori diversi che possono essere i normali browser degli utenti, ma anche altri servizi come i web crawler.

È possibile creare un sito che utilizza un GET per inserire un record, ma è anche necessario prevedere che tutto ciò che è costruito per consumare il proprio sito funzioni con il presupposto che si stia rispettando l'accordo.

Come ultimo esempio, i browser Web avvisano gli utenti quando tentano di aggiornare una pagina che è stata raggiunta da un avviso di richiesta HTTP POST che alcuni dati potrebbero essere nuovamente inviati. Non si ottiene quel livello di protezione dei browser integrati se la pagina viene raggiunta da una richiesta HTTP GET.

Si può leggere di più qui: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

3

ho affrontato una situazione avrei dovuto usare il PUT, invece di GET. Ho avuto una chiamata di inserimento di permesso che va a una terza parte (questo era google). Giro una richiesta Ajax GET per l'autorizzazione di aggiornamento chiamata al mio Servlet e da loro la chiamata è andata a un servizio esterno. Il servizio esterno ha impiegato molto tempo per completare la richiesta. Nel frattempo stavo vedendo la duplicazione della stessa chiamata di permesso nei miei registri del server. Era un browser che continua a chiamare il server dicendo che hai finito?poiché è un GET e il browser può chiamare il server il maggior numero possibile di volte. Il browser ha seguito lo standard e il mio codice no. Ho avuto il problema di non seguire lo standard.

Problemi correlati