Um endpoint idempotente produz o mesmo resultado sendo chamado uma vez ou cinco vezes com a mesma entrada. GET, PUT e DELETE são naturalmente idempotentes; POST não é. Você torna um endpoint de criação idempotente fazendo o cliente enviar uma chave de idempotência única, guardando essa chave junto com o recurso criado na mesma transação, e devolvendo o resultado original em qualquer repetição.
Por que os entrevistadores perguntam isso
Retries estão em todo lugar: clientes repetem, load balancers repetem, filas reentregam. O entrevistador quer saber se você projeta para entrega ao menos uma vez em vez de supor que cada request chega exatamente uma vez. Eles escutam pelo padrão de chave de idempotência, pelo detalhe de que a chave e a escrita têm que dar commit juntas, e por consciência da corrida quando dois requests idênticos caem no mesmo instante.
Como estruturar sua resposta
- Defina idempotência em termos de chamadas repetidas, não de chamadas só de leitura.
- Explique por que POST precisa de ajuda e PUT não.
- Descreva o fluxo da chave de idempotência de ponta a ponta.
- Cubra o caso de duplicata concorrente com uma restrição única.
Exemplo de resposta
Idempotente significa que chamar duas vezes deixa o sistema no mesmo estado que chamar uma vez. PUT é idempotente porque você está declarando o estado final; POST normalmente não é, porque cada chamada significa faça mais um. Para um endpoint de criação eu faço o cliente gerar uma chave, tipicamente um UUID, e mandar como header. No servidor eu guardo essa chave numa tabela com restrição única, e escrevo na mesma transação do recurso em si, porque se esses dois commits puderem divergir o esquema inteiro é decorativo. Se a mesma chave voltar, eu busco e devolvo a resposta original com o status original. A parte que as pessoas esquecem é o caso concorrente, em que dois retries caem no mesmo milissegundo. O índice único trata disso: o segundo insert falha, eu capturo a violação e leio de volta o vencedor em vez de dar erro. Construí isso para um endpoint de pagamentos depois que a gente cobrou alguém em dobro durante uma instabilidade de rede.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Por quanto tempo você guardaria as chaves de idempotência?
- Que código de status você devolve num request repetido?
- E se o retry manda a mesma chave mas um corpo diferente?
Mais perguntas para Engenheiro de Software
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas