Request IDs
Cada resposta da API inclui um header X-Request-ID que identifica aquela requisição
específica. É o dado que transforma um “falhou ontem à tarde” em algo que conseguimos
procurar.
Recebendo
Não é preciso fazer nada: o header vem em toda resposta, incluindo os erros 401, 403,
404, 422, 429 e 502.
Guarde esse valor nos seus logs junto com a resposta. Se precisar reportar um problema, o
X-Request-ID da requisição que falhou é a primeira coisa que vamos pedir — com ele
encontramos a requisição exata nos nossos registros em segundos, sem adivinhar.
A única exceção é o 500 InternalServerError. Uma exceção não tratada é respondida por
uma camada que fica fora de onde o header é adicionado, então essa resposta não traz
X-Request-ID — justamente o caso em que ele mais faz falta. Do nosso lado o identificador
fica registrado; para reportar um 500, envie o horário exato com fuso e o endpoint, que
conseguimos localizar mesmo assim.
Enviando o seu
Se o seu sistema já gera identificadores de requisição, envie-os e nós os adotamos: eles
ficam nos nossos logs e no registro de auditoria, então o seu identificador e o nosso são o
mesmo e o rastro cruza a fronteira entre os dois sistemas.
Deve ser um UUID versão 4 (com ou sem hífens). Um valor em qualquer outro formato é
descartado silenciosamente e geramos um nosso no lugar: a resposta trará um
X-Request-ID que não é o que você enviou, e o seu identificador não ficará registrado em
lugar nenhum.
Os identificadores que geramos têm 32 caracteres hexadecimais sem hífens
(9f2c1a7b4e8d4c3fa1b6e5d0c7a92341); ambas as formas são válidas.
Um por tentativa, não por operação
Um request ID identifica uma tentativa de requisição. Se você tentar de novo após um
timeout, essa nova requisição leva um request ID novo — é isso que mantém as duas
tentativas distinguíveis nos registros.
Isso é exatamente o oposto de uma chave de idempotência, que deve ser a mesma em
todas as tentativas para que a operação não seja executada duas vezes. Não use o mesmo
valor para as duas coisas:
Usar um identificador novo por tentativa como chave de idempotência quebra a proteção
contra duplicados sem gerar nenhum erro: cada tentativa parece uma operação distinta. Em
um endpoint que envia mensagens, isso significa que o seu cliente recebe a mensagem duas
vezes.