BrasilAPI / cep-promise

Busca por CEP integrado diretamente aos serviços dos Correios, ViaCEP e outros (Node.js e Browser)
MIT License
2.88k stars 316 forks source link

Serviço instável de busca de ceps #269

Open Sabaudo opened 7 months ago

Sabaudo commented 7 months ago

Nos últimos dias, notei que a consulta pelos ceps está retornando 404 not found com ceps existentes. Análise algumas issues por aqui e percebi que o problema pode ser com erros sendo armazenados em cache, retornando estes erros quando não deveria. Em alguns momentos a busca por um cep só funciona com hífen, outras vezes sem hífen e em último caso talvez funcione colocando "?test" depois da url.

No cep 88062510 só deu certo com o hífen, mas não é garantido pois ontem estava funcionando sem o hífen.

https://brasilapi.com.br/api/cep/v1/88062510 https://brasilapi.com.br/api/cep/v1/88062-510 https://brasilapi.com.br/api/cep/v1/88062510?test

wellwelwel commented 7 months ago

Complementando com um pouco de debug:

Usando os provedores brasilapi ou correios:

import cep from 'cep-promise';

const CEP = await cep('88062510', {
  providers: ['brasilapi'] // ou 'correios'
});

console.log(CEP);

Erro:

Todos os serviços de CEP retornaram erro

Usando os provedores viacep, widenet ou correios-alt:

{
  cep: '88062510',
  state: 'SC',
  city: 'Florianópolis',
  neighborhood: 'Lagoa da Conceição',
  street: 'Servidão Kairós',
  service: 'viacep' // ou 'widenet' e 'correios-alt'
}
wellwelwel commented 7 months ago

Supondo que de fato o problema seja o cachê, acredito que o problema esteja no BrasilAPI, onde o cache, por exemplo, só deveria ser gerado se o CEP for retornado com sucesso.

Usando o cep-promise, ele irá retornar o CEP normalmente com a primeira resposta de sucesso, mesmo que outras derem erro:

import cep from 'cep-promise';

const CEP = await cep('88062-510');

console.log(CEP);

Saída:

{
  cep: '88062510',
  state: 'SC',
  city: 'Florianópolis',
  neighborhood: 'Lagoa da Conceição',
  street: 'Servidão Kairós',
  service: 'correios-alt'
}
shadowlik commented 7 months ago

Comportamento realmente está intermitente, alguns exemplos para ajudar a debugar:

11035-030: https://brasilapi.com.br/api/cep/v1/11035-030 (CEP só funciona se buscar com hífen) 110350030: https://brasilapi.com.br/api/cep/v1/11035030 (Erro)

05418000: https://brasilapi.com.br/api/cep/v1/05418000 (Só funciona sem hífen) 05418-000: https://brasilapi.com.br/api/cep/v1/05418-000 (Erro)

Update: No via CEP todos os casos funcionam

https://brasilapi.com.br/api/cep/v1/11035-030 https://brasilapi.com.br/api/cep/v1/11035030

alijuniorbr commented 6 months ago

Realmente é um erro de cache, pois se colocar uma string aleatoria ?xxx apos o cep ele refaz a busca e retorna o resultado correto.

A ViaCep esta funcionando normalmente como verificado acessando em formato JSON ou em formato XML porem esse mesmo cep retorna um erro https://brasilapi.com.br/api/cep/v1/04513010 a nao ser que altere a url para invalidar o cache desse cep como em https://brasilapi.com.br/api/cep/v1/04513010?alijunior

alijuniorbr commented 6 months ago

Acredito que a implementacao para correção seria de salvar o cache somente em caso de sucesso no retorno da pesquisa, ou entao invalidar o cache apos determinado periodo.