Skip to content

Datasources

O servidor expõe endpoints para resolver e introspectar datasources remotos, permitindo executar queries e descobrir schemas sem precisar gerar um relatório completo.

Resolver — POST /api/v1/datasources/resolve

Permissão: canGenerate

Executa a query do datasource e retorna os dados resultantes.

Body:

json
{
  "dataSource": {
    "id": "ds1",
    "type": "list",
    "source": "external",
    "driver": "postgres",
    "connectionRef": "my-postgres",
    "query": "SELECT * FROM sales WHERE region = {{region}}"
  },
  "params": { "region": "Sul" }
}
CampoObrigatórioDescrição
dataSourceSimDefinição do datasource
paramsNãoParâmetros para substituição na query

Resposta 200:

json
{
  "data": [
    { "id": 1, "product": "Widget A", "amount": 150 },
    { "id": 2, "product": "Widget B", "amount": 230 }
  ],
  "rowCount": 2
}

Timeout: 30 segundos.

StatusErroQuando
400missing_datasourcedataSource ausente no body
400dangerous_queryQuery contém SQL perigoso (DDL/DML)
403forbidden_hostSSRF guard bloqueou o destino
422no_resolverNenhum resolver para o driver informado
422unresolved_connectionconnectionRef não encontrada
422resolve_failedErro genérico de resolução
504resolve_timeoutTimeout (30s)

Introspectar — POST /api/v1/datasources/introspect

Permissão: canSettings

Retorna o schema dos campos e uma amostra de dados. Útil para o designer de relatórios.

Body: Mesmo formato do resolve.

Resposta 200:

json
{
  "fields": [
    { "name": "id", "type": "int" },
    { "name": "product", "type": "String" },
    { "name": "amount", "type": "int" }
  ],
  "sample": [
    { "id": 1, "product": "Widget A", "amount": 150 }
  ]
}
StatusErroQuando
400missing_datasourcedataSource ausente
400dangerous_queryQuery contém SQL perigoso
403forbidden_hostSSRF guard bloqueou
422no_resolverDriver não suportado
422unresolved_connectionConexão não encontrada
422introspect_failedErro de introspecção
504introspect_timeoutTimeout

Drivers suportados

DriverTipo de conexãoResolver
postgresdatabasePostgresDataSourceResolver
postgresthttpPostgRestDataSourceResolver
resthttpRestDataSourceResolver

Sanitização de queries

Para drivers SQL (postgres, postgrest), as queries passam por um sanitizador que bloqueia:

  • DDL: DROP, ALTER, TRUNCATE, CREATE
  • DML de escrita: INSERT INTO, UPDATE ... SET, DELETE FROM
  • Privilégios: GRANT, REVOKE
  • Execução de código: COPY ... TO/FROM
  • Multi-statement: ;
  • Tamanho máximo: 10 KB

Apenas queries de leitura (SELECT, WITH) são permitidas.

Sulfite do 🇧🇷 para o mundo © 2026 Rafael S. Pinheiro