Junior — Middle
Como garantir que as operações sejam idempotentes sem efeitos negativos?
sobes.tech IA
Resposta da IA
Para que as operações sejam aptas a serem repetidas sem consequências negativas, devem ser idempotentes. Isto significa que a segunda chamada à operação com os mesmos parâmetros não deve alterar o estado do sistema após a primeira execução bem-sucedida.
Para isso, pode-se:
- Utilizar identificadores únicos de pedidos (por exemplo, UUID) e guardá-los, para que ao receber novamente o pedido, apenas retorne o resultado anterior.
- Projetar as operações de modo a que não alterem o estado se já tiverem sido aplicadas (por exemplo, atualizar um valor para um valor fixo em vez de incrementar).
- Nos bancos de dados, usar mecanismos de transações e verificar a existência do registo antes de inserir.
Exemplo em Go:
var processedRequests = make(map[string]bool)
func processRequest(id string) string {
if processedRequests[id] {
return "Pedido já processado"
}
// Executar a operação
processedRequests[id] = true
return "Pedido processado com sucesso"
}
Desta forma, uma segunda chamada com o mesmo id não provocará uma alteração adicional no estado.