Erros API: orientar sem expor segredos

Em resumo

Uma resposta de erro ajuda a corrigir dados, renovar autenticação, pedir permissões ou esperar. Mensagem pública e diagnóstico interno precisam de detalhes diferentes.

Corredor seguro de servidores e redes sem pessoas Ilustração · cena fictícia
Neste artigo

Separar estado, tipo e ocorrência

RFC 9457 define application/problem+json. Use um tipo estável e detalhe compreensível; o cliente não deve interpretar prosa traduzida para decidir. Se existir status, mantenha-o coerente com o estado HTTP transmitido.

EstadoSignificado HTTPTratamento a considerar
400Pedido incorretoCorrigir antes de repetir.
401Faltam credenciais válidasVerificar credenciais e mecanismo previsto.
403Pedido compreendido mas recusadoRever direitos; repetir não os concede.
503Serviço temporariamente indisponívelEsperar e repetir com limites se permitido.

Prever caminhos de falha

  • Documente códigos, formatos e tratamento esperado. Teste respostas vazias, conteúdo não JSON de gateways, ligações interrompidas e timeouts.
  • Valide entradas e permissões no servidor. Trate falhas esperadas sem ocultar anomalias desconhecidas; não apresente uma falha funcional como sucesso.
  • Devolva um identificador de correlação útil para suporte. Exclua stack traces, consultas internas, palavras-passe e tokens das respostas públicas.

Repetir apenas quando adequado

5xx não autoriza ciclos ilimitados. Combine contrato, estado, idempotência e prazo global. Comunique um defeito com reprodução mínima expurgada; após correção, teste o caso original e recusas de acesso próximas.

Fontes primárias

Os erros da API devem orientar a ação sem vazamento de informações.

O status HTTP fornece uma categoria inicial, mas um cliente pode precisar de um tipo estável e detalhes úteis. A RFC 9457 descreve uma estrutura de problema comum; ela não justifica a exposição de rastreamentos internos ou dados sensíveis.

  • Separe recusa permanente, entrada corrigível e falha temporária.
  • Documente o tipo, o status e a possível ação do cliente para cada erro importante.
  • Teste se as respostas não contêm segredos ou payloads completos desnecessários.

Fonte primária: IETF RFC 9457 — Problem Details for HTTP APIs. Método relacionado: consultar o guia prático.

Tentativas API: contar o orçamento completo de tempo

Defina limite de chamadas e prazo global.

Caso pedagógico fictício: os números não representam a CIE nem clientes.

Modelo fictício: quatro chamadas até 250 ms e esperas de 100, 200 e 400 ms. Exclui jitter, ligação, filas e validação local.

Tentativas totais
41 + 3
Esperas acumuladas (ms)
700100 + 200 + 400
Orçamento modelado (ms)
17004 × 250 + 700
Decompor a sequência
PassoChamada máxima (ms)Espera seguinte (ms)
Tentativa 1250100
Tentativa 2250200
Tentativa 3250400
Tentativa 42500
Total1000700
Durações do modelo (ms)
  • Tempo das chamadas1.000
  • Esperas acumuladas700
  • Prazo global (ms)1.500

Verificações antes de concluir

  1. 1.000 + 700 = 1.700 ms excede o prazo de 1.500 ms.
  2. Propague o prazo global e evite efeitos duplicados; timeout não prova cancelamento remoto.

Experimentar um orçamento de tentativas

n × T + W × (2^(n−1) − 1)

Método relacionado: consultar o guia prático.

Erros API: tipos, estados e provas

As notas detalhadas desta edição estão disponíveis em inglês.

Handle an error without parsing its sentence

An API client may receive a translated title, missing member or unfamiliar extension. Preserve decisions based on the documented type and HTTP status, then connect a safe action to the context.

  • Compare received status and JSON status without silently replacing either.
  • Test absent type, string status instead of a number, and an unknown extension.
  • Separate person-facing text, business code and occurrence reference.

Explore problem types and eight fictional responses →

IETF · M. Nottingham, E. Wilde, S. Dalal · RFC 9457 · July 2023 · obsoletes RFC 7807 · §3.1, §3.2, §4.2, §5