DEV Community

Klleriston Andrade
Klleriston Andrade

Posted on

5 1

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

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Cloudinary image

Video API: manage, encode, and optimize for any device, channel or network condition. Deliver branded video experiences in minutes and get deep engagement insights.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay