Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando trabalhamos com APIs cujo comportamento de retorno varia, especialmente em cenários onde o servidor retorna JSON em respostas bem-sucedidas e textos em respostas de erro, lidamos com um desafio prático comum. A questão central é: como obter o conteúdo JSON na cadeia de promessas e, ao mesmo tempo, capturar uma resposta em texto caso o parse JSON falhe, sem que o fluxo seja interrompido por um erro não tratado?
---
Em muitas aplicações, a integração com APIs externas exige um tratamento robusto de respostas. O padrão desejado é: tentar interpretar a resposta como JSON, mas se essa interpretação falhar, capturar o conteúdo como texto para análise ou exibição de mensagem de erro.
O problema se agrava quando a API não fornece um padrão consistente — por exemplo, retorna JSON em sucesso e texto (string) em erro, sem possibilidade de configurar esse comportamento.
---
Na implementação típica, você tenta fazer res.json() dentro de um .then(). Se a resposta não for JSON válido, essa chamada lança uma exceção, que pode ser capturada por um .catch() subsequente, mas o fluxo se torna difícil de manipular, pois o erro ocorre na tentativa de parse. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
A abordagem tradicional de usar try/catch dentro do .then() não funciona porque o método res.json() retorna uma promessa, não uma operação síncrona. Assim, o erro de parse não é capturado pelo try/catch ao redor do .then(), mas sim pela rejeição da promessa. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
---
A estratégia mais recomendada é: sempre transformar a resposta em texto primeiro, com res.text(), e então tentar fazer o parse JSON manualmente. Isso garante controle total sobre o fluxo, permitindo detectar falhas na conversão. Veja um exemplo técnico: Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
fetch(apiUrl)
.then(res => res.text())
.then(body => {
try {
return JSON.parse(body). } catch (e) {
// Aqui, o body é um texto que não é JSON válido
throw new Error(`Falha na conversão JSON: ${body}`). }
})
.then(parsed => {
// Manipula o JSON válido aqui
console.log('Dados JSON:', parsed). })
.catch(error => {
// Captura qualquer erro, incluindo falhas na análise do JSON
console.error('Erro ao processar resposta:', error.message). }).
Este método garante que, independentemente do conteúdo da resposta, você consegue processar de forma controlada, com uma estratégia clara para lidar com respostas inesperadas. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
---
Optar por transformar tudo em texto antes do parse tem impacto de performance, especialmente se a API é grande ou o volume de requisições é alto. No entanto, essa abordagem traz maior controle e evita erros imprevistos na cadeia de processamento. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Outro ponto importante é o tratamento de códigos de status HTTP. Mesmo que o conteúdo seja texto, é interessante verificar o status antes de tentar parsear, para decidir se um erro deve ser tratado diferentemente. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
Por exemplo, respostas com código 200 podem ser assumidas como JSON, enquanto códigos 400 ou 500 podem indicar mensagens de erro em texto, que devem ser exibidas ao usuário ou logadas. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
---
Um erro comum é tentar usar res.json() e, se der erro, tentar um catch que captura a rejeição da promessa, mas sem um tratamento adequado para o conteúdo. Isso gera um fluxo confuso e difícil de manter. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Outra armadilha é a tentativa de lançar res.text() dentro de um .then(), que não funciona porque res.text() também é uma promessa. A estratégia de transformar tudo em texto antes é mais segura. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Por fim, muitos esquecem de verificar o status HTTP antes de processar o conteúdo, o que pode levar a interpretações incorretas. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois. A decisão fica mais saudável quando o time consegue medir o impacto depois.
---
1. Sempre transforme a resposta em texto com res.text().
2. Faça o parse manual de JSON, usando JSON.parse() dentro de um try/catch.
3. Capture erros de parse e trate-os de forma adequada, como exibir uma mensagem de erro ao usuário.
4. Verifique o status HTTP antes de decidir interpretar o conteúdo.
Essa abordagem reduz a complexidade do fluxo e aumenta a robustez na manipulação de respostas heterogêneas, comum em integrações com APIs legacy ou mal padronizadas. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
---
Controlar a leitura de respostas heterogêneas exige uma estratégia clara e consistente. Transformar tudo em texto e fazer parse manual é uma técnica que dá muito mais controle, evita erros inesperados e torna o fluxo de processamento mais previsível. Assim, fica mais fácil lidar com erros e, principalmente, entender o que a API realmente está retornando, seja JSON ou texto. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Como vocês têm lidado com APIs que retornam formatos diferentes? Há alguma abordagem que preferem na rotina de produção? A decisão fica mais saudável quando o time consegue medir o impacto depois. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
lol.
Boa, mas eu queria ver o caso ruim também.
manda um ae pra mim isso depende muito de quem vai cuidar quando sair do post e virar rotina do time.
esse é o detalhe. no papel parece simples, mas no time real sempre entra revisão, suporte e contexto perdido