Idempotente
Un metodo HTTP è idempotente se una richiesta identica può essere fatta una o più volte di seguito con lo stesso effetto lasciando il server nello stesso stato. In altre parole, un metodo idempotente non dovrebbe avere effetti collaterali (tranne che per mantenere le statistiche). Implementati correttamente, i metodi GET
HEAD
PUT
e DELETE
sono idempotenti, ma non POST
metodo. Tutti i metodi sicuri sono anche idempotenti.
Per essere idempotente, viene considerato solo lo stato back-end effettivo del server, il codice di stato restituito da ogni richiesta può essere diverso: la prima chiamata di un DELETE
restituirà probabilmente un 200
, mentre quelle successive restituiranno probabilmente un 404
. Un’altra implicazione diDELETE
essendo idempotente è che gli sviluppatori non dovrebbero implementare API RESTful con una funzionalità di eliminazione dell’ultima voce utilizzando ilDELETE
metodo.
Si noti che l’idempotenza di un metodo non è garantita dal server e alcune applicazioni potrebbero non correttamente rompere il vincolo di idempotenza.
GET /pageX HTTP/1.1
è idempotente. Chiamato più volte in una riga, il cliente ottiene gli stessi risultati:
GET /pageX HTTP/1.1GET /pageX HTTP/1.1GET /pageX HTTP/1.1GET /pageX HTTP/1.1
POST /add_row HTTP/1.1
non è idempotente; se viene chiamato più volte, si aggiunge una serie di righe:
POST /add_row HTTP/1.1POST /add_row HTTP/1.1 -> Adds a 2nd rowPOST /add_row HTTP/1.1 -> Adds a 3rd row
DELETE /idX/delete HTTP/1.1
è idempotente, anche se il codice di stato restituito può cambiare tra le richieste:
DELETE /idX/delete HTTP/1.1 -> Returns 200 if idX existsDELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deletedDELETE /idX/delete HTTP/1.1 -> Returns 404