Quale verbo HTTP dovrei usare per attivare un'azione in un servizio web REST?
Quando si considerano i dettagli di un servizio REST, è spesso utile considerare questa euristica: come implementarlo con un sito Web?
HTML può descrivere in modo nativo solo richieste GET e POST. Quindi possiamo iniziare sono la ricerca lì.
È GET
appropriato? Per rispondere a questa domanda, dobbiamo pensare alle ipotesi che i clienti e i componenti intermedi sono autorizzati a formulare GET
. La semantica di GET
è sicura
il client non richiede e non prevede alcuna modifica dello stato sul server di origine a seguito dell'applicazione di un metodo sicuro a una risorsa di destinazione. Allo stesso modo, non è previsto che l'uso ragionevole di un metodo sicuro possa causare danni, perdita di proprietà o oneri insoliti sul server di origine.
L'implicazione, quindi, è che i clienti e i componenti intermedi hanno la facoltà di invocare una richiesta GET con la frequenza necessaria per soddisfare le proprie preoccupazioni. I ragni possono ottenere risorse indiscriminatamente per aggiornare i loro indici. Le cache possono essere pre-recuperate. Su una rete inaffidabile, i messaggi persi possono essere ritentati con la frequenza necessaria per garantire almeno una risposta.
Sarà utilizzato per ricaricare configurazioni, cache, ecc.
Se queste sono cose costose da fare, forse non vuoi che i clienti emettano queste richieste a loro discrezione.
POST
d'altra parte, è effettivamente non vincolato: ciò riduce notevolmente le ipotesi che i clienti generici sono autorizzati a fare. Non si ottengono componenti che fanno richieste POST speculative perché sarebbero difettose nel farlo - nulla nello standard dice che va bene.
PUT
, PATCH
, DELETE
... questi sono metodi sicuri con una semantica più specifici rispetto POST
; se sono appropriati dipenderà o meno dal tuo modello di risorsa.
Un'idea importante da tenere a mente è che i metodi HTTP appartengono al dominio del documento (vedi il discorso di Jim Webber del 2011 ), gli effetti che stai descrivendo probabilmente non fanno parte del dominio del documento, ma sono invece gli effetti collaterali invocati quando i documenti vengono cambiati . Ciò ti dà molta libertà in termini di organizzazione dei documenti per svolgere il lavoro.