Idempotente
Um método HTTP é idempotente se um idêntico pedido pode ser feito uma vez ou várias vezes em uma linha com o mesmo efeito, enquanto deixando o servidor no mesmo estado. Em outras palavras, um método idempotente não deve ter quaisquer efeitos colaterais (exceto para manter estatísticas). Implementado corretamente, o GET
HEAD
PUT
e DELETE
métodos são idempotentes, mas não o POST
método. Todos os métodos seguros também são idempotentes.
Para ser idempotente, apenas o back-end do estado do servidor é considerado, o código de status retornado por cada pedido podem diferir: a primeira chamada de um DELETE
provavelmente retornará um 200
, enquanto aqueles sucessivas provavelmente retornará um 404
. Outra implicação doDELETE
ser idempotente é que os desenvolvedores não devem implementar APIs RESTful com uma funcionalidade de delete da última entrada usando o método DELETE
.
Note que a idempotência de um método não é garantida pelo servidor e algumas aplicações podem quebrar incorretamente a restrição de idempotência.
GET /pageX HTTP/1.1
é idempotente. Chamado várias vezes em uma linha, o cliente obtém os mesmos resultados:
GET /pageX HTTP/1.1GET /pageX HTTP/1.1GET /pageX HTTP/1.1GET /pageX HTTP/1.1
POST /add_row HTTP/1.1
não é idempotente; se ele é chamado várias vezes, ele adiciona várias linhas:
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, mesmo se o código de status retornado pode alterar entre as solicitações:
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