Service objects: idempotência
O curso trata de idempotência em service objects Rails: operações seguras para rodar mais de uma vez com os mesmos argumentos. Parte do conceito e dos três níveis e mostra como cliques duplos, retries de jobs, webhooks repetidos e condições de corrida geram duplicatas. Depois vêm idempotency keys, índices UNIQUE, ON CONFLICT e o padrão de constraint e rescue. Tudo se junta num serviço de três passos com objeto Result, aplicado a jobs e webhooks. O fim traz testes em RSpec que conferem que nada se duplica.
O que você vai aprender
- ✓O que é idempotência e seus três níveis: natural, por constraint e por chave
- ✓Como cliques duplos, retries de jobs, webhooks repetidos e corridas geram registros duplicados
- ✓Como desenhar idempotency keys e guardá-las numa tabela ou no próprio registro
- ✓Índices UNIQUE e parciais, insert, upsert e ON CONFLICT no PostgreSQL
- ✓Um padrão de service object em três passos que devolve um Result com Data.define
- ✓Testes em RSpec para chamadas duplicadas, caminhos de corrida, chaves e efeitos colaterais
O que é idempotência?
Você entra num quarto escuro e levanta o interruptor. A luz acende. Você levanta de novo, e nada muda, porque a luz já estava acesa. Você pode levantar cinquenta vezes e o resultado é o mesmo: a luz está acesa.
Ler a aula completa grátis →Currículo
7 aulasO que é idempotência?
Define idempotência, compara operações absolutas e relativas, passa pelos métodos HTTP e apresenta os três níveis.
O custo de código não-idempotente
Mostra como cliques duplos, retries de jobs, webhooks repetidos e a corrida do find_or_create_by criam duplicatas silenciosas.
Chaves de idempotência
Explica idempotency keys, a tabela de chaves processadas, a chave guardada no registro de XP e quem deve gerá-la.
Idempotência no nível do banco de dados
Usa índices UNIQUE e parciais, constraint e rescue, e inserts e upserts com ON CONFLICT para barrar linhas duplicadas.
Service objects idempotentes no Rails
Junta checagem, create! e rescue de RecordNotUnique num service object que devolve um Result imutável com Data.define.
Idempotência em jobs em background & webhooks
Trata de jobs que rodam de novo, retry_on, webhooks repetidos, chaves estáveis e o padrão de log de eventos.
Testando services idempotentes
Escreve testes em RSpec para chamadas duplicadas, o caminho do RecordNotUnique, idempotency keys, efeitos colaterais e objetos Result.