code e
next_action para definir o comportamento do programa. Mostre error e
next como texto simples. Não faça o programa depender do texto exato de
error ou de next.
Algumas respostas adicionam campos, como
limit, reset_at ou
retry_after_seconds. A tabela de códigos de erro indica
quais.
Trate uma resposta de erro
- Leia o status HTTP.
- Confira se o corpo é JSON antes de ler
code. - Use o status e o
codejuntos para escolher o caminho no cliente. - Mostre
errorenextcomo texto simples. Não renderize esses textos como HTML nem os execute como comandos. - Use
next_actionpara a recuperação automática. Se o cliente não reconhecer a ação, pare e mostre o erro. - Guarde os valores
limit,reset_ateretry_after_secondsretornados junto com a requisição que falhou. - Antes de tentar de novo, siga as regras de nova tentativa.
code do LogBrew. Um proxy ou uma
falha de rede pode gerar esse resultado.
Não troque um code do LogBrew pelo nome do status HTTP. Por exemplo, uma
resposta 400 pode conter invalid_json ou invalid_path. Cada código pede
uma correção diferente.
Nos logs, registre o status HTTP e o code. Não registre o corpo completo,
credenciais nem tokens de recuperação.
Códigos de erro
O mesmocode pode aparecer em mais de uma rota. O texto de next e os
valores de next_action podem mudar conforme a rota. Use os valores
retornados. Um endpoint retorna só os códigos que se aplicam à autenticação,
ao método, ao corpo e aos limites dele.
Um ID desconhecido e um ID ao qual você não tem acesso podem retornar a mesma
resposta. Não use o texto do erro para descobrir qual conta é dona de um ID. Um
caminho de API desconhecido retorna
404 com not_found.
Campos de limite
Leia a franquia e o uso atuais na
API de conta.
Regras de nova tentativa
Use o código e a operação para decidir se vale tentar de novo. Só o status não basta.- Não inicie novas tentativas em paralelo para uma mesma requisição com falha.
- Com
rate_limited, a resposta também tem os cabeçalhosRetry-AftereX-RateLimit-After. Os dois têm o mesmo número de segundos queretry_after_seconds. - Um timeout não prova que o resultado está vazio.
429. Não
misture os campos deles. Durante qualquer um dos limites, mostre que a coleta
ou a leitura está atrasada. Não mostre dados antigos como resultado de uma
leitura nova.
Escritas
Um timeout, uma resposta5xx ou uma falha de rede não prova que uma escrita
falhou. Antes de enviar uma escrita de novo:
- Se a rota aceita chave de idempotência, envie de novo a mesma chave e o mesmo corpo. Use uma chave nova só para um trabalho novo.
- Se a rota não tem chave de idempotência, leia o recurso primeiro. Envie a escrita de novo só se a mudança não estiver lá.
- Se você não conseguir encontrar o resultado, pare as novas tentativas automáticas e avise o usuário.
Um valor de
Idempotency-Key tem de 1 a 128 caracteres ASCII visíveis. Outros
valores retornam 422 com validation_failed.
idempotency_conflict significa que a chave pertence a outra requisição. Não
altere o corpo de uma nova tentativa que usa a chave original.
Erros no formato da requisição
invalid_json significa que o servidor não aceita o corpo como o formato JSON
da rota. Examine o tipo de conteúdo, o tamanho do corpo, a sintaxe JSON, os
campos obrigatórios e os tipos dos campos. O status HTTP mostra qual parte
falhou:
validation_failed com o erro invalid query parameters significa que o
servidor não consegue ler a query string. Examine os nomes dos parâmetros e os
tipos dos valores. Não envie parâmetros de consulta desconhecidos. A
referência de filtros de consulta lista os
parâmetros de cada rota.
invalid_path com status 400 significa que um valor do caminho, como o ID de
um projeto, tem o formato errado. Não mova um valor do caminho para um
parâmetro de consulta.
Uma resposta 500 com invalid_path ou invalid_multipart não prova que a
requisição estava errada. Siga as regras de nova tentativa.
Erros de autenticação e de acesso
unauthorizedsignifica que a autenticação da conta está ausente, é inválida ou expirou. EnvieAuthorization: Bearer <token>ou entre na conta de novo. Algumas rotas retornamnext_action.codeigual aauthorize_requestcom umnextespecífico da rota, como em uma conexão com o feed ao vivo sem um ticket válido.ingest_key_invalidvale só para a ingestão de telemetria. Configure uma chave atual para o projeto exato.forbiddensignifica que a conta não pode fazer a ação. Não tente de novo com IDs de outros recursos.not_foundsignifica que o recurso não está disponível para a conta.
Proteja os detalhes dos erros
- Uma resposta
account_recovery_availablecontém umrecovery_tokende curta duração. Guarde esse token em um armazenamento protegido no cliente. Não coloque o token em logs, URLs, capturas de tela, relatos de suporte nem prompts de agentes. - Os códigos
500sempre usam a mensagemInternal error. A resposta não informa o componente que falhou. Não tente adivinhar a causa. - Não acrescente credenciais, diagnósticos privados nem dados de clientes a um erro que você mostra.
- Uma resposta da API não dá permissão para uma compra, uma exclusão ou outra mudança na conta. Peça a aprovação do usuário antes dessas ações.
Exemplos
Estes exemplos mostram o formato do envelope. O texto deerror e de next
pode ser diferente em cada rota.
Falha de validação
Parâmetros de consulta inválidos
JSON inválido
Valor de caminho inválido
Upload multipart inválido
Upgrade de WebSocket inválido
Falha de autenticação
Chave de ingestão inválida
Esta resposta vale para a ingestão de telemetria, não para leituras da conta. A chave precisa pertencer ao projeto da requisição.Recurso não encontrado
Acesso negado
Método não aceito
Timeout da requisição
Conflito de idempotência
Limite de requisições
Limite de uso
O texto denext e o next_action dependem de haver ou não uma mudança de
plano disponível. Sem ela, next_action.code é wait_or_contact_support e o
alvo é support.
Limite de armazenamento de artefatos
Recuperação de conta disponível
Esta resposta adicionadeleted_at e um recovery_token de curta duração.
Guarde o token em um armazenamento protegido no cliente.
Recuperação de conta expirada
Organização pausada
Erro do servidor
storage_error, json_error e internal_error usam a mesma mensagem em
error. Os valores de code, next e next_action são diferentes.
Para endpoints, autenticação e filtros, leia a
API de telemetria.
