Sobes.tech
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.