DEV Community

Klleriston Andrade
Klleriston Andrade

Posted on

Idempotência, Potência e Métodos HTTP em REST

Em sistemas de grande porte, onde podem haver milhares ou até milhões de acessos simultâneos, garantir consistência e confiabilidade nas operações é imprescindível. Imagine um cenário em que cada cliente realiza um pagamento e, devido a uma falha de conexão, ou qualquer outro problema externo que dificulte a comunicação entre cliente x servidor, o mesmo pedido é enviado varias vezes, resultando assim em múltiplas cobranças causando insatisfação por parte do usuário.

É exatamente nesses casos que entram os conceitos de idempotência e potência.

Idempotência

O conceito de idempotência diz respeito a uma operação que, quando executada várias vezes, sempre produz o mesmo estado final. Ou seja, independentemente do número de vezes que o usuário realize uma operação, o estado do sistema permanece consistente após a primeira execução bem-sucedida.

Um exemplo clássico é a confirmação de um pedido:

Se o cliente enviar a requisição para confirmar o pedido várias vezes, apenas a primeira tentativa será processada. As outras tentativas não terão efeito adicional.

Exemplos:

  • Pagamentos online: Garantir que uma transação não seja processada mais de uma vez.
  • Confirmação de ações: Certificar-se de que uma ação, como envio de e-mail, não seja duplicada.

Potência

Enquanto a idempotência está relacionada à repetição de uma operação, potência refere-se ao impacto que uma operação tem sobre o estado do recurso no servidor

Operações potentes: Modificam o estado do recurso (ex.: POST, PUT).
Operações não potentes: Não alteram o estado do recurso (ex.: GET, HEAD).

Motivo:

Um método GET apenas recupera informações de um recurso, sem alterar o estado.
Um método POST cria ou modifica um recurso, impactando o estado no servidor.

Chaves de Idempotência

As chaves de idempotência são uma ferramenta essencial para garantir a segurança e a confiabilidade das operações.

Uma chave de idempotência é um identificador único gerado pelo cliente e vai junto com uma requisição ao servidor. Pense em um rotulo exclusivo para cada operação que quer realizar

Como funciona ?

  1. Geração da Chave: Antes de enviar uma requisição, o cliente gera uma chave única
  2. Envio da Requisição: A chave é incluída no cabeçalho da requisição
  3. Processamento no Servidor: Se é a primeira vez que o servidor recebe essa chave, ele processa a requisição normalmente.

Se a mesma chave é recebida novamente, o servidor retorna o resultado da operação original, sem reprocessá-la

Exemplo:

Imagine que você está fazendo um pagamento online:

  1. Você clica em "Pagar" e seu aplicativo gera uma chave de idempotência (ex: "idempotencia-pagamento-123").
  2. O aplicativo envia a requisição de pagamento com esta chave.
  3. Se, por algum problema de conexão, a requisição for enviada duas vezes, o servidor:
  • Processará apenas a primeira requisição.
  • Para a segunda, retornará o resultado da primeira, evitando um pagamento duplicado.

Esquema de processamento

Top comments (0)