Em cenários onde APIs encapsulam erros, o desenvolvedor pode se deparar com mensagens de erro genéricas e pouco informativas, dificultando a identificação da causa raiz.
// Código SDK somente leitura
public static Data processarRetorno(String resultado) throws ErroAPIException {
try {
retornoEntidade = JSON.parseObject(resultado);
} catch (Exception e) {
throw new ErroAPIException(CodigoErroSistema.ERRO_INESPERADO);
}
if (retornoEntidade == null || retornoEntidade.obter("data") == null) {
throw new ErroAPIException(CodigoErroSistema.ERRO_INESPERADO);
}
return retornoEntidade.obter("data", Data.class);
}
public static Data executarAPI(String nomeMetodo, Object parametros) throws ErroAPIException {
return processarRetorno(obterConteudoURL(nomeMetodo, parametros));
}
// Implementação de exemplo
try {
Data dados = executarAPI("nomeDaApi", parametros);
} catch (ErroAPIException e) {
// A mensagem de erro exibida será apenas CodigoErroSistema.ERRO_INESPERADO, sem detalhes adicionais.
}
Para investigar a origem de tais problemas, a análise de pacotes de rede utilizando ferramentas como o Wireshark torna-se uma técnica valiosa. Se a função JSON.parseObject falhar, é provável que a resposta da API não seja um JSON válido, podendo ser um XML ou HTML.
Benefícios da Análise de Pacotes:
- Identificação da Origem do Erro: Determinar se o problema reside no cliente (sua aplicação) ou no provedor da API.
- Feedback Detalhado: Caso o erro seja do lado do provedor da API, a aálise permite fornecer informações precisas para que eles corrijam o problema. Isso também aumenta a confiança para retentar a operação.
- Diagnóstico de Erros no Cliente: Quando o erro é causado pela sua aplicação, a análise de pacotes auxilia na depuração e identificação do bug.
Capturando e Analisando Tráfego com Wireshark
Primeiro, faça o download e instale o Wireshark.
Configurando Filtros:
No Wireshark, você pode salvar expressões de filtro frequentemente usadas clicando no ícone de adição + ao lado do campo de filtro. Para gerenciar múltiplos filtros, acesse as "Preferências de Expressão de Filtro" no menu lateral.
Exemplo de Filtro para um Host Específico:
Para capturar tráfego destinado ao host blog.csdn.net, utilize o seguinte filtro:
http.host contains "blog.csdn.net"
Após aplicar o filtro, selecione um pacote de requisição HTTP. Em seguida, navegue até Seguir > Fluxo HTTP para visualizar todas as requisições e respostas TCP associadas a essa comunicação. Isso permite inspecionar claramente os dados retornados pela API.
Expressões de Filtro Úteis no Wireshark
-
Capturar Requisições HTTP:
tcp.port == 80 || udp.port == 80Este filtro captura uma quantidade significativa de tráfego HTTP, o que pode ser excessivo em alguns casos.
-
Filtrar por Host e Caminho de Requisição Específico:
http.host == "exemplo.com" and http.request.uri contains "/caminho/especifico"Este filtro é útil para isolar requisições HTTP locais que visam um host e um caminho de URI particulares.
-
Capturar Respostas de API Específica:
ip.src_host contains "dominio.real.com" and httpEste filtro exibe o tráfego HTTP de resposta vindo de um domínio específico para a sua máquina. O
dominio.real.comdeve ser o host real obtido através da análise de outras requisições.