O Que É uma Requisição Idempotente? Segura para Repetir
Uma requisição idempotente é aquela que produz o mesmo estado final não importa quantas vezes seja enviada, então fazer retry dela após uma falha é seguro e não causa duplicatas.
Redes falham de forma imprevisível, então retries são essenciais, mas retries só são seguros se repetir uma requisição não causar dano. Idempotência é essa propriedade: envie-a uma ou cinco vezes e o resultado é idêntico. Entender quais requisições são idempotentes diz quais delas um pipeline pode fazer retry com segurança após um soluço.
Mesmo resultado, muitos envios
Uma operação idempotente deixa o sistema no mesmo estado seja aplicada uma vez ou repetidamente. Definir um valor como X é idempotente; incrementar em um não é.
Quais métodos HTTP qualificam
- GET, PUT e DELETE são definidos como idempotentes.
- POST geralmente não é idempotente.
- Idempotency keys podem tornar um POST seguro para retry.
Por que importa para retries
Após um timeout você frequentemente não consegue dizer se a requisição de fato foi concluída. Se ela for idempotente, você pode simplesmente fazer retry sem medo de duplicar um efeito como uma cobrança duplicada ou um deploy duplicado.
Idempotency keys
Para operações não idempotentes, APIs aceitam uma idempotency key para que o servidor reconheça uma repetição e aplique o efeito apenas uma vez. Isso torna um POST de outro modo inseguro passível de retry.
Idempotência em CI/CD
Projetar etapas de deploy para serem idempotentes significa que uma reexecução não cria releases ou recursos duplicados. Ferramentas declarativas ajudam porque aplicar o mesmo estado desejado duas vezes é naturalmente idempotente.
Retries automáticos seguros
Como retries só ajudam quando as requisições são idempotentes, a lógica de retry automático mira operações idempotentes. Os runners da Latchkey fazem retry automático de falhas transitórias em requisições idempotentes a endpoints comuns, deixando operações inseguras para você proteger.
Principais conclusões
- Uma requisição idempotente produz o mesmo estado seja enviada uma ou muitas vezes.
- GET, PUT e DELETE são idempotentes; POST precisa de uma idempotency key para ser seguro.
- A idempotência é o que torna seguro fazer retry após um soluço de rede.