Idempotência

Explicamos nosso esquema de idempotência para evitar a criação de dois ou mais recursos para a mesma solicitação.



Como uma solicitação HTTP pode dar timeout, precisamos garantir que, ao tentar novamente, o processamento ocorra apenas uma vez. Para isso, em cada solicitação, enviaremos um header x-idempotency-key com um ID único que você deverá processar com um cache em memória (por exemplo: Redis).

No início de cada transação, você deve verificar se a chave de idempotência que enviamos já está no cache em memória e, dependendo de sua presença ou não, você deverá realizar o seguinte:

O header de idempotência não existe no cache

Você deverá armazenar no cache em memória a relação chave de idempotência → pedido, com um estado em trânsito e um TTL de 3 minutos.

Quando aprovar ou rejeitar a transação, você deverá armazenar o resultado no cache e atualizar o estado da chave de idempotência para 'concluído'.

O header de idempotência já existe no cache

Em caso de uma solicitação duplicada, você deverá verificar o estado da transação no cache.

  • Se estiver no estado concluído, você deverá responder com um código HTTP 200 e o body esperado para o endpoint, completando-o com o resultado do cache.
  • Se estiver no estado em trânsito, você deverá responder com um código HTTP 425 (Too Early: RFC 8470) e o body esperado para o endpoint. Nós buscaremos a resposta dessa solicitação alguns milissegundos depois.

Requests em andamento

Se você receber uma segunda solicitação com o mesmo ID de idempotência e a primeira ainda estiver em andamento, você deverá responder com um http-status 425 e um body vazio.

O conteúdo desta documentação foi útil?