Como consumir uma API REST no Power BI com Power Query
Ligar o Power BI diretamente a uma API REST permite trazer dados sempre atualizados de serviços web — CRMs, lojas online ou ferramentas de marketing — sem exportações manuais. O Power Query trata do pedido HTTP, converte a resposta JSON numa tabela e deixa tudo pronto para atualização automática. Consumir uma API REST no Power BI é mais simples do que parece quando se conhece o padrão certo com a função Web.Contents.
Pré-requisitos
- Power BI Desktop instalado (versão recente).
- O endereço base (URL) da API e o endpoint que queres consultar.
- Uma chave de API ou token de acesso, caso a API exija autenticação.
- Noções básicas do Editor do Power Query (Base > Transformar dados).
Passo 1: Abrir o Power Query e criar uma consulta Web
No Power BI Desktop, clica em Obter dados > Web. Escolhe a opção Avançado para separares o endereço base do resto do pedido — este detalhe é importante para que a atualização agendada funcione mais tarde no Power BI Service. Coloca o endereço base na primeira parte do URL e o caminho do endpoint no campo das partes do URL.
Depois de confirmares, o Power Query cria automaticamente um passo com a função Web.Contents. Vais editá-lo à mão para ganhares controlo total sobre cabeçalhos e parâmetros.
Passo 2: Escrever o pedido com Web.Contents
Abre o Editor Avançado (Base > Editor Avançado) e substitui o código pelo padrão abaixo. Repara que o endereço base fica fixo e tudo o resto vai em RelativePath e Query — assim o Power BI reconhece a fonte de dados e permite a atualização na cloud.
let
Response = Json.Document(
Web.Contents(
"https://api.example.com",
[
RelativePath = "v1/sales",
Headers = [#"Authorization" = "Bearer YOUR_TOKEN", #"Accept" = "application/json"],
Query = [ page = "1", per_page = "100" ]
]
)
)
in
Response
A função Json.Document converte a resposta de texto num registo ou numa lista que o Power Query já sabe interpretar. Se a tua API usar uma chave em vez de um token, muda o cabeçalho Authorization para o nome que a documentação indicar (por exemplo, x-api-key).
Passo 3: Transformar o JSON numa tabela
A maioria das APIs devolve os registos dentro de um campo, por exemplo data. Extrai essa lista e converte-a numa tabela com colunas legíveis:
let
Response = Json.Document(Web.Contents("https://api.example.com",
[ RelativePath = "v1/sales",
Headers = [#"Authorization" = "Bearer YOUR_TOKEN"],
Query = [ page = "1", per_page = "100" ] ])),
Items = Response[data],
ToTable = Table.FromList(Items, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
Expanded = Table.ExpandRecordColumn(ToTable, "Column1", {"id", "customer", "total"})
in
Expanded
Ajusta os nomes id, customer e total aos campos reais da tua API. A partir daqui podes usar o interface gráfico do Power Query para mudar tipos de dados, remover colunas e filtrar linhas.
Passo 4: Lidar com a paginação
As APIs raramente devolvem tudo de uma só vez. Para percorrer todas as páginas usa List.Generate, que repete o pedido até uma página vir vazia:
let
GetPage = (p as number) as list =>
let
r = Json.Document(Web.Contents("https://api.example.com",
[ RelativePath = "v1/sales",
Headers = [#"Authorization" = "Bearer YOUR_TOKEN"],
Query = [ page = Text.From(p), per_page = "100" ] ]))
in
r[data],
Pages = List.Generate(
() => [i = 1, rows = GetPage(1)],
each List.Count([rows]) > 0,
each [i = [i] + 1, rows = GetPage([i] + 1)],
each [rows]
),
AllRows = List.Combine(Pages)
in
AllRows
O resultado é uma única lista com os registos de todas as páginas, pronta a converter em tabela tal como no passo anterior. Adapta a condição de paragem à tua API: algumas devolvem um campo next ou o total de páginas, que podes usar em vez de verificar se a lista está vazia.
Dica de segurança: evita escrever o token diretamente no código. Em produção, quando o Power BI pedir credenciais, escolhe Chave da Web API ou OAuth. Assim a chave fica guardada em segurança e não viaja dentro do ficheiro .pbix.
Verificar o resultado
Confirma que a coluna expandida mostra os dados esperados na pré-visualização do Power Query. Clica em Fechar e Aplicar e cria um visual simples, como uma tabela, para veres as linhas no relatório. Por fim, testa a atualização com Base > Atualizar: se os dados voltarem sem erros de credenciais, o pedido está bem configurado. Se aparecer o erro comum "Access to the resource is forbidden", revê o token e o cabeçalho Authorization.
Conclusão
Com Web.Contents, Json.Document e List.Generate tens tudo o que é preciso para transformar quase qualquer API REST numa fonte de dados atualizável no Power BI. O passo seguinte é publicar o relatório no Power BI Service e configurar a atualização agendada — reparaste como o padrão RelativePath torna isso possível? Experimenta agora com uma API pública, por exemplo de cotações ou de meteorologia, para praticares sem depender de credenciais.