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 ?
- Geração da Chave: Antes de enviar uma requisição, o cliente gera uma chave única
- Envio da Requisição: A chave é incluída no cabeçalho da requisição
- 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:
- Você clica em "Pagar" e seu aplicativo gera uma chave de idempotência (ex: "idempotencia-pagamento-123").
- O aplicativo envia a requisição de pagamento com esta chave.
- 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.
Top comments (0)