Ir para conteúdo
  • 0

CHAMADA DE API COM ERRO 500


FrancoAndre

Pergunta

  • Alunos

Olá à todos! Estou tentando fazer uma consulta em uma API no power query e o código, a princípio, funcionou tranquilamente e consegui obter o retorno de alguns registros, porém somente com 100. Ao aplicar uma etapa de paginação no código o retorno da API agora vem sempre com o código 500, gostaria de saber onde o meu código está errando:

 

let
    limite = 50, 
    pagina = 1,
    data_inicio = Date.ToText(Date.AddDays(Date.From(DateTime.LocalNow()), - (90 - 1)), "yyyy-MM-dd", "pt-BR"), //pega a data dos últimos 30 dias
    data_fim = Date.ToText(Date.From(DateTime.LocalNow()), "yyyy-MM-dd", "pt-BR"),
    chave_api_cobli = api_key,
    url = "https://api.cobli.co/",

    ObterCaminhos = (url, headers, payload) =>
        let
            Origem = Json.Document(Web.Contents(url, [Headers = headers, RelativePath = "public/v1/road-speed-events", Query = payload])),
            Dados = Origem[data]
        in
            Dados,

    ObterCaminhosRecursivo = (dadosAcumulados as list, pagina as number) =>
        let
            payload = [
                start_date = data_inicio,
                end_date = data_fim,
                limit = Text.From(limite),
                page = Text.From(pagina),
                timezone = "America/Sao_Paulo"
            ],
            headers = [
                Accept = "application/json",
                #"cobli-api-key" = chave_api_cobli
            ],
            novosDados = ObterCaminhos(url, headers, payload),
            dadosCombinados = dadosAcumulados & novosDados,
            hasNextPage = not List.IsEmpty(novosDados),
            proximosDados = if hasNextPage then @ObterCaminhosRecursivo(dadosCombinados, pagina + 1) else dadosCombinados
        in
            proximosDados,

    ObterDadosComEspera = (dadosAcumulados as list, pagina as number) =>
        let
            dados = ObterCaminhosRecursivo(dadosAcumulados, pagina),
            hasNextPage = not List.IsEmpty(dados),
            proximosDados = if hasNextPage then List.Accumulate({1..Number.RoundDown(List.Count(dados) / limite)}, dados, (state, current) => let _ = Function.InvokeAfter(() => null, #duration(0, 0, 0, 1)) in ObterCaminhosRecursivo(state, pagina + limite)) else dados
        in
            proximosDados,

    resultado = ObterDadosComEspera({}, pagina)
in
    resultado

image.png.113b6ec04b7dbd5207bbae13aafd7e5e.png

 

Na documentação da API informa que o erro 500 é erro no servidor, mas isso quer dizer que fiz algo errado? Estourei o tempo de solicitações? Ficou muito confuso pra mim a partir desse momento e gostaria de uma ajuda.

Desde já agradeço a atenção.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos

O erro 500 é um erro de servidor, o que indica que algo está errado do lado do servidor ao qual você está fazendo a chamada da API, e não necessariamente com o seu código. No entanto, é sempre uma boa ideia verificar se a forma como você está fazendo a chamada da API não está contribuindo para o problema. Aqui estão algumas coisas que você pode verificar e ajustar no seu código M (Power Query):

1 - Validação dos Parâmetros da API: Certifique-se de que todos os parâmetros que você está enviando na sua requisição estão corretos e no formato esperado pela API. Isso inclui datas, limites de página, chaves de API, etc.

2 - Manuseio de Erros: Inclua um manuseio de erros na função ObterCaminhos para capturar e entender melhor os erros que podem estar ocorrendo durante as chamadas da API. Por exemplo, você pode tentar capturar o status do erro e a mensagem retornada.

3 - Cabeçalhos e Autenticação: Verifique se os cabeçalhos de requisição, especialmente a chave de API, estão sendo configurados corretamente.

4 - Limites de Taxa da API: Algumas APIs têm limites de taxa que restringem o número de chamadas que você pode fazer em um determinado período. Se você estiver fazendo muitas chamadas rapidamente, pode estar atingindo esse limite.

5 - Teste com Uma Única Chamada: Tente fazer uma única chamada para a API (sem a lógica de paginação) para verificar se o problema persiste. Isso pode ajudar a isolar se o problema está na lógica de paginação ou na chamada da API em si.

6 - Logs do Servidor: Se você tiver acesso aos logs do servidor para a API, eles podem fornecer mais detalhes sobre o que está causando o erro 500.

7 - Consulte a Documentação da API: Revise a documentação da API para garantir que você está seguindo todas as diretrizes e requisitos.

8 - Tempo de Espera: No método ObterDadosComEspera, você está usando uma função para esperar 1 segundo entre as chamadas. Verifique se isso está de acordo com as diretrizes de tempo de espera recomendadas pela API.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
1 hora atrás, Alex Pereira disse:

O erro 500 é um erro de servidor, o que indica que algo está errado do lado do servidor ao qual você está fazendo a chamada da API, e não necessariamente com o seu código. No entanto, é sempre uma boa ideia verificar se a forma como você está fazendo a chamada da API não está contribuindo para o problema. Aqui estão algumas coisas que você pode verificar e ajustar no seu código M (Power Query):

1 - Validação dos Parâmetros da API: Certifique-se de que todos os parâmetros que você está enviando na sua requisição estão corretos e no formato esperado pela API. Isso inclui datas, limites de página, chaves de API, etc.

2 - Manuseio de Erros: Inclua um manuseio de erros na função ObterCaminhos para capturar e entender melhor os erros que podem estar ocorrendo durante as chamadas da API. Por exemplo, você pode tentar capturar o status do erro e a mensagem retornada.

3 - Cabeçalhos e Autenticação: Verifique se os cabeçalhos de requisição, especialmente a chave de API, estão sendo configurados corretamente.

4 - Limites de Taxa da API: Algumas APIs têm limites de taxa que restringem o número de chamadas que você pode fazer em um determinado período. Se você estiver fazendo muitas chamadas rapidamente, pode estar atingindo esse limite.

5 - Teste com Uma Única Chamada: Tente fazer uma única chamada para a API (sem a lógica de paginação) para verificar se o problema persiste. Isso pode ajudar a isolar se o problema está na lógica de paginação ou na chamada da API em si.

6 - Logs do Servidor: Se você tiver acesso aos logs do servidor para a API, eles podem fornecer mais detalhes sobre o que está causando o erro 500.

7 - Consulte a Documentação da API: Revise a documentação da API para garantir que você está seguindo todas as diretrizes e requisitos.

8 - Tempo de Espera: No método ObterDadosComEspera, você está usando uma função para esperar 1 segundo entre as chamadas. Verifique se isso está de acordo com as diretrizes de tempo de espera recomendadas pela API.

Opa, Alex! Agradeço a resposta.

 

Coincidentemente já tive o mesmo o retorno com esses pontos pelo ChatGPT 😅

Gostaria de entender etapa do código posso estar errando.

  • Like 2
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Você chegou tentar aplicar essas dicas?


As vezes na api você tem uma limitacao de requisições que você pode fazer no dia. Seria interessante como falei você consultar a documentação ou suporte para ver se existe mesmo essa limitação! 

Outra questão se pode ver e talvez aumentar esse tempo de espera que você espera cada requisição de uma página talvez funcione!

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...