Implementação do protocolo de fonte de dados de ferramentas de gráficos (V0.6)

Nesta página, descrevemos como implementar um serviço compatível com o protocolo de fonte de dados das Ferramentas de gráfico para expor dados a gráficos usando a classe de consulta.

Conteúdo

Público

Esta página é destinada principalmente a desenvolvedores que criarão suas próprias fontes de dados sem a ajuda da Biblioteca de fontes de dados de ferramentas de gráficos. Se você estiver usando essa ou qualquer outra biblioteca auxiliar, leia a documentação da sua biblioteca primeiro.

Esta página também é destinada a leitores interessados em entender o protocolo de transferência usado para comunicação entre uma visualização do cliente e uma fonte de dados.

Se você estiver criando ou usando uma visualização, não precisará ler esta página.

Para ler este documento, você precisa entender a sintaxe básica das solicitações JSON e HTTP. Você também deve entender como os gráficos funcionam da perspectiva de um usuário.

Observação: o Google não endossa oficialmente nem oferece suporte a fontes de dados que não sejam do Google e que ofereçam suporte ao protocolo da fonte de dados das Ferramentas de gráfico.

Visão geral

Você pode implementar o protocolo da fonte de dados do Chart Tools para se tornar um provedor de fontes de dados para seus próprios gráficos ou de outros tipos. Uma fonte de dados do Chart Tools expõe um URL, chamado URL da fonte de dados, para o qual um gráfico pode enviar solicitações HTTP GET. Em resposta, a fonte de dados retorna dados formatados corretamente que o gráfico pode usar para renderizar o gráfico na página. Esse protocolo de solicitação/resposta é conhecido como o protocolo de transferência eletrônica da API de visualização do Google.

Os dados exibidos por uma fonte de dados podem ser extraídos de vários recursos, como um arquivo ou banco de dados. A única restrição é que você pode formatar os dados como uma tabela bidimensional com colunas tipadas.

Como uma fonte de dados das ferramentas de gráficos, você precisa analisar uma solicitação em um formato específico e retornar uma resposta nesse formato. Isso pode ser feito de duas maneiras gerais:

  • Use uma das seguintes bibliotecas auxiliares para processar a solicitação e a resposta, além de criar o DataTable a ser retornado. Se você usa uma dessas bibliotecas, precisa escrever apenas o código necessário para disponibilizar seus dados para a biblioteca na forma de uma tabela.
  • Escreva sua própria fonte de dados do zero processando a solicitação, construindo uma DataTable e enviando a resposta.

Como funciona:

  1. A fonte de dados expõe um URL, chamado de URL da fonte de dados, a que os gráficos enviam uma solicitação HTTP GET.
  2. O cliente faz uma solicitação HTTP GET com parâmetros que descrevem qual formato usar para os dados retornados, uma string de consulta opcional e parâmetros personalizados opcionais.
  3. A fonte de dados recebe e analisa a solicitação, conforme descrito em Formato da solicitação.
  4. A fonte de dados prepara os dados no formato solicitado. Normalmente, é uma tabela JSON. Os formatos de resposta são abordados na seção Formato de resposta. Opcionalmente, a fonte de dados pode ser compatível com a linguagem de consulta da API de visualização que especifica filtragem, classificação e outras manipulações de dados.
  5. A fonte de dados cria uma resposta HTTP que inclui os dados serializados e outros parâmetros de resposta, e a envia de volta ao cliente, conforme descrito em Formato da resposta.

Observação: todos os parâmetros e valores constantes de string listados neste documento para solicitações e respostas, como responseHandler e "ok", estão em letras minúsculas e diferenciam maiúsculas de minúsculas.

Requisitos mínimos

Estes são os requisitos mínimos para servir como uma fonte de dados de Ferramentas de gráfico:

  • A fonte de dados precisa aceitar solicitações HTTP GET e precisa estar disponível para os clientes.
  • O protocolo pode mudar e é compatível com um esquema de versão (a versão atual é 0.6). Portanto, sua fonte de dados precisa aceitar solicitações que usam versões anteriores e a versão atual. Tente oferecer suporte às novas versões assim que elas forem lançadas para evitar prejudicar os clientes que fizerem upgrade para a versão mais recente rapidamente.
  • Não falhe se propriedades desconhecidas forem enviadas como parte da solicitação. Isso ocorre porque as novas versões podem introduzir novas propriedades que você não conhece.
  • Analise apenas as propriedades esperadas. As novas versões podem introduzir novas propriedades, mas não aceite e use toda a string de solicitação. Para se proteger contra ataques maliciosos, analise cuidadosamente e use apenas as propriedades esperadas.
  • Documente os requisitos de fonte de dados com atenção se você não estiver codificando os gráficos de cliente. Isso inclui documentar as seguintes informações:
    • Todos os parâmetros personalizados que você aceitar,
    • Se você pode analisar ou não a linguagem de consulta da API de visualização do Google e
    • Que tipo de dados você retorna e a estrutura desses dados (o que as linhas e colunas representam, além de qualquer rotulagem).
  • Tome todas as precauções de segurança padrão para um site que aceita solicitações de clientes desconhecidos. É possível oferecer suporte razoável a MD5, hash e outros mecanismos de segurança nos seus parâmetros para autenticar solicitações ou ajudar a proteger contra ataques maliciosos, e espera que os clientes estejam cientes dos seus requisitos e respondam a eles. No entanto, documente bem todos os seus requisitos se não estiver codificando os gráficos. Consulte Considerações de segurança abaixo.
  • Todas as strings de solicitação e resposta precisam ser codificadas em UTF-8.
  • O formato de resposta mais importante é JSON. Primeiro, implemente o JSON, já que esse é o formato usado pela maioria dos gráficos. Adicione outros tipos de resposta posteriormente.
  • Não é obrigatório oferecer suporte à linguagem de consulta da API de visualização, mas isso torna sua fonte de dados mais útil para os clientes.
  • Você não precisa oferecer suporte a solicitações de nenhum tipo de gráfico, mas pode aceitar parâmetros personalizados para gráficos personalizados. No entanto, você precisa retornar as respostas no formato padrão descrito abaixo.

Considerações sobre segurança

Ao projetar sua fonte de dados, você precisa considerar o nível de segurança deles. Você pode usar vários esquemas de segurança para o site, desde o simples acesso por senha até a autenticação segura por cookies.

Os ataques de inclusão de script em vários locais (XSSI, na sigla em inglês) são um risco nos gráficos. Um usuário pode navegar para uma página que contenha um script malicioso que começa a tentar fazer consultas aos URLs da fonte de dados usando as credenciais do usuário atual. Se o usuário não tiver feito logout de um site, o script será autenticado como o usuário atual e terá permissões no site. Com o uso de uma tag <script src>, o script malicioso pode incluir a fonte de dados, da mesma forma que o JSONP.

Como um nível extra de segurança, restrinja as solicitações àquelas provenientes do mesmo domínio da sua fonte de dados. Isso restringe consideravelmente a visibilidade da sua fonte de dados. No entanto, se você tiver dados muito sensíveis que não podem ser acessados de fora do seu domínio, pense nisso. Uma fonte de dados que só permite solicitações do mesmo domínio é chamada de fonte de dados restrita, ao contrário de uma fonte de dados irrestrita, que aceita consultas de qualquer domínio. Confira alguns detalhes sobre como implementar uma fonte de dados restrita:

Para garantir que uma solicitação realmente venha do seu domínio e não de um domínio externo (ou de um navegador dentro do domínio que está sob ataque XSRF):

  • Verifique a presença de um cabeçalho "X-DataSource-Auth" na solicitação. Esse cabeçalho é definido pela API de visualização do Google. Você não precisa examinar o conteúdo dele, apenas verificar se ele está lá. Se você estiver usando a biblioteca de fonte de dados das Ferramentas de gráfico do Google, a biblioteca poderá cuidar disso para você.
  • Use a autenticação de cookies para autenticar o cliente. Não há uma maneira conhecida de injetar cabeçalhos personalizados em uma solicitação de vários domínios mantendo os cookies de autenticação ativos.
  • Torna o JavaScript improvável de ser executado quando incluído com uma tag <script src>. Para fazer isso, acrescente um prefixo à resposta JSON com )]}' seguido de uma nova linha. No seu cliente, remova o prefixo da resposta. Para XmlHttpRequest, isso só é possível quando a solicitação é originada do mesmo domínio.

Formato da solicitação

Um cliente envia uma solicitação HTTP GET com vários parâmetros, incluindo elementos personalizados, uma string de consulta opcional, assinatura e outros elementos. Você é responsável apenas por analisar os parâmetros descritos nesta seção e precisa ter cuidado para não processar outros para evitar ataques maliciosos.

Verifique se você tem valores padrão para os parâmetros opcionais (padrão e personalizados) e documente todos os seus padrões na documentação do site.

Veja alguns exemplos de solicitações. Consulte mais exemplos de solicitação e resposta no final deste documento em Exemplos:

Observação: as strings de solicitação a seguir e as mostradas na seção Exemplos precisam ter escape de URL antes do envio.

Basic request, no parameters:
http://www.example.com/mydatasource

Request with the tqx parameter that contains two properties:
http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168

Request with a query string:
http://www.example.com/mydatasource?tq=limit 1

Veja a lista de todos os parâmetros padrão na string de solicitação. Os nomes de parâmetros (como "version") e valores de strings constantes (como "ok", "warning" e "not_modify") diferenciam maiúsculas de minúsculas. A tabela também descreve se o parâmetro precisa ser enviado e, se enviado, se você precisa processá-lo.

Parâmetro
Obrigatório na solicitação?
A fonte de dados precisa gerenciar?
Descrição
tq
Não
Não

Uma consulta escrita na linguagem de consulta da API de visualização do Google, especificando como filtrar, classificar ou manipular de outra forma os dados retornados. A string não precisa estar entre aspas.

Exemplo: http://www.example.com/mydatasource?tq=select Col1.

tqx
Não
Sim

Um conjunto de pares de chave-valor delimitados por dois pontos para parâmetros padrão ou personalizados. Os pares são separados por ponto e vírgula. Veja uma lista dos parâmetros padrão definidos pelo protocolo de visualização:

  • reqId: [obrigatório na solicitação; a fonte de dados precisa gerenciar] um identificador numérico para essa solicitação. Isso é usado para que, se um cliente enviar várias solicitações antes de receber uma resposta, a fonte de dados poderá identificar a resposta com a solicitação adequada. Envie esse valor de volta na resposta.
  • version: [opcional na solicitação; a fonte de dados precisa lidar] o número da versão do protocolo de visualização do Google. A versão atual é 0.6. Se não for enviada, use a versão mais recente.
  • sig: [opcional na solicitação; opcional para a fonte de dados processar] um hash de DataTable enviado a esse cliente em solicitações anteriores a essa fonte de dados. Essa é uma otimização para evitar o envio de dados idênticos a um cliente duas vezes. Consulte Como otimizar sua solicitação abaixo para ver informações sobre como usar esse recurso.
  • out - [Opcional na solicitação; a fonte de dados precisa gerenciar] String que descreve o formato dos dados retornados. Pode ser qualquer um destes valores:
    • json: [valor padrão] é uma string de resposta JSON (descrita abaixo).
    • html: uma tabela HTML básica com linhas e colunas. Se isso for usado, a única coisa que precisará ser retornada será uma tabela HTML com os dados. Isso é útil para depuração, conforme descrito na seção Formato da resposta abaixo.
    • csv: valores separados por vírgula. Se usado, a única coisa retornada será uma string de dados CSV. Solicite um nome personalizado para o arquivo nos cabeçalhos de resposta especificando um parâmetro outFileName.
    • tsv-excel: semelhante ao csv, mas usando guias em vez de vírgulas, e todos os dados são codificados em utf-16.
    O único tipo de dados que um gráfico criado na API de visualização do Google solicitará é json. Consulte Formato da resposta abaixo para detalhes sobre cada tipo.
  • responseHandler - [opcional na solicitação; a fonte de dados precisa processar] O nome da string da função de processamento do JavaScript na página do cliente que será chamada com a resposta. Se não estiver incluído na solicitação, o valor será "google.visualization.Query.setResponse". Ele será enviado como parte da resposta. Consulte Formato da resposta abaixo para saber como fazer isso.
  • outFileName - [opcional na solicitação; opcional para o manuseio da fonte de dados] Se você especificar out:csv ou out:tsv-excel, poderá solicitar o nome do arquivo especificado aqui. Exemplo:outFileName=results.csv.

Exemplo : tqx=version:0.6;reqId:1;sig:5277771;out:json; responseHandler:myQueryHandler

tqrt
Não
Não

Reservado: ignore este parâmetro. O método usado para enviar a consulta.

Formato da resposta

O formato da resposta depende do parâmetro out da solicitação, que especifica o tipo de resposta esperada. Consulte as seções a seguir para saber como responder a cada tipo de solicitação:

  • JSON: retorna uma resposta JSON que inclui os dados em um objeto JavaScript que pode ser transmitido diretamente para um construtor DataTable para preenchê-lo. Esse é, de longe, o tipo de solicitação mais comum e o mais importante de ser implementado corretamente.
  • CSV: retorna uma lista simples de valores separados por vírgulas a ser processada pelo navegador.
  • TSV: retorna uma lista de valores separados por tabulação a ser processada pelo navegador.
  • HTML: retorna uma tabela HTML a ser renderizada pelo navegador.

Use a Biblioteca de fontes de dados de visualização do Google (java) ou a biblioteca Python de visualização para gerar esses formatos de saída.

Formato da resposta JSON

O formato de resposta padrão será JSON se a solicitação incluir um cabeçalho "X-DataSource-Auth" e JSONP, caso contrário. O cliente dos gráficos do Google é compatível com versões modificadas de JSON e JSONP. Se você estiver usando as bibliotecas auxiliares Java ou Python, elas gerarão o código adequado. Se você analisar as respostas manualmente, consulte Modificações de JSON abaixo.

Se você estiver aplicando solicitações do mesmo domínio, verifique a presença do cabeçalho "X-DataSource-Auth" na solicitação e use cookies de autorização.

Esse é o único formato de resposta especificado pelo método da API de visualização do Google google.visualization.Query.send() . Confira alguns exemplos de solicitações e respostas JSON no final desta página em Exemplos. É possível usar as bibliotecas auxiliares Java ou Python para criar essa string de resposta para você.

Esse formato de resposta é um objeto JSON codificado em UTF-8 (um objeto entre chaves { } com cada propriedade separada por uma vírgula) que inclui as propriedades na tabela abaixo (os dados são atribuídos à propriedade table). Esse objeto JSON precisa ser unido ao valor de parâmetro responseHandler da solicitação. Portanto, se o valor responseHandler da solicitação era "myHandler", você deve retornar uma string como esta (somente uma propriedade é mostrada para concisão):

"myHandler({status:ok, ...})"

Se a solicitação não incluir um valor responseHandler, o valor padrão será "google.visualization.Query.setResponse". Portanto, retorne uma string como esta (somente uma propriedade é mostrada para fins de brevidade):

"google.visualization.Query.setResponse({status:ok, ...})"

Estes são os membros do objeto de resposta disponíveis:

Propriedade
Obrigatório?
Descrição
versão
Não

Um número de string que fornece o número da versão do protocolo de transferência eletrônica da Visualização do Google. Se não for especificada, o cliente vai usar a versão mais recente.

Exemplo: version=0.6.

reqId
Sim*
Um número de string que indica o ID da solicitação para esse cliente. Se ela estava na solicitação, retorne o mesmo valor. Consulte a descrição de reqId na seção de solicitação para mais detalhes.

* Se esse parâmetro não foi especificado na solicitação, não é necessário defini-lo na resposta.
status
Sim

String que descreve o sucesso ou a falha desta operação. Precisa ser apenas um dos seguintes valores:

  • ok - Solicitação bem-sucedida. Uma tabela precisa ser incluída na propriedade table.
  • warning: concluído, mas com problemas. Uma tabela precisa ser incluída na propriedade table.
  • error - Ocorreu um problema. Se você retornar isso, não retorne table, mas sim errors.

Exemplo: status:'warning'.

avisos
Somente se status=warning

Uma matriz de um ou mais objetos, cada um descrevendo um problema não fatal. Obrigatório se for status=warning. Caso contrário, não será permitido. Cada objeto tem as seguintes propriedades de string (retornam apenas um valor para cada propriedade):

  • reason: [obrigatório] é uma descrição de string de uma palavra do aviso. O protocolo define os valores a seguir, mas você pode definir seus próprios valores, se necessário. No entanto, o cliente não processará valores personalizados de nenhuma maneira especial. Só é possível ter um valor reason:
    • data_truncated: o DataTable retornado teve algumas linhas removidas, porque o usuário incluiu uma string de consulta que cortou a lista de resultados ou a fonte de dados não queria retornar resultados completos por algum motivo.
    • other: um aviso genérico não especificado.
  • message: [opcional] uma string curta entre aspas explicando o problema, possivelmente usada como um título para uma caixa de alerta. Isso pode ser exibido para o usuário. HTML não é compatível.
  • detailed_message - [Opcional] Uma mensagem detalhada de string entre aspas explicando o problema e as soluções possíveis. O único HTML compatível é o elemento <a> com um único atributo href. A codificação Unicode é compatível. Isso pode ser exibido para o usuário.

Exemplo: warnings:[{reason:'data_truncated',message:'Retrieved data was truncated'}].

erros
Obrigatório se status=error

Uma matriz de um ou mais objetos, cada um descrevendo um erro. Obrigatório se status=error. Caso contrário, não será permitido. Isso é semelhante ao valor warnings. Observe que o erro not_modified, embora seja um erro, na verdade não é um erro para o cliente.

A matriz tem os seguintes membros de string (retorna apenas um valor para cada membro):

  • reason - [Obrigatório] Igual ao warnings.reason, mas os seguintes valores são definidos:
    • not_modified: os dados não foram alterados desde a última solicitação. Se esse for o motivo do erro, você não deverá ter um valor para table.
    • user_not_authenticated: se a fonte de dados exigir autenticação e isso não tiver sido feito, especifique esse valor. Em seguida, o cliente vai mostrar um alerta com o valor de message.
    • unknown_data_source_id
    • access_denied
    • unsupported_query_operation
    • invalid_query
    • invalid_request
    • internal_error
    • not_supported
    • illegal_formatting_patterns
    • other: um erro genérico e não especificado.
  • message - [opcional] igual a warnings.message. Observação:um usuário mal-intencionado pode usar uma string de dados detalhada para acessar dados não autorizados ou até mesmo atacar seus dados ou seu site. Se você armazenar dados que deveriam ser seguros ou processar consultas do usuário diretamente, considere não retornar uma mensagem de erro detalhada que possa fornecer informações a um invasor. Em vez disso, forneça uma mensagem genérica, como "String de consulta incorreta".
  • detailed_message - [opcional] igual a warnings.detailed_message. Veja o aviso para conferir informações muito detalhadas de message.

Exemplo:status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]

sig
Não

Um valor de hash do objeto da tabela. Útil para otimizar a transferência de dados entre o cliente e a fonte de dados. Escolha o algoritmo de hash que quiser. Se você aceitar essa propriedade, retorne o valor transmitido pelo cliente se nenhum dado for retornado ou um novo hash se novos dados forem retornados.

Exemplo: sig:'5982206968295329967'.

table
Não

Um objeto DataTable em notação literal JavaScript com seus dados. Consulte a seção de referência vinculada para mais detalhes sobre o formato desse objeto. Veja um exemplo de uma tabela de dados simples:

{cols:[{id:'Col1',label:'',type:'number'}],
 rows:[{c:[{v:1.0,f:'1'}]},
       {c:[{v:2.0,f:'2'}]},
       {c:[{v:3.0,f:'3'}]},
       {c:[{v:1.0,f:'1'}]}
      ]
} 

A propriedade table só estará presente se status=ok ou status=warning. Se você não estiver retornando dados, não inclua essa propriedade (ou seja, não transmita a propriedade com um valor de string vazio).

Exemplo:consulte os exemplos abaixo.

 

JSON restrito obrigatório

As bibliotecas auxiliares do Google e todas as consultas enviadas ao Google retornam JSON/JSONP restrito. Se você não estiver analisando o código retornado, isso não será importante para você. Se estiver, use JSON.parse() para converter a string JSON em um objeto JavaScript. Uma diferença na forma como o JSON é processado pela API é que, embora ele não aceite valores de data JavaScript (por exemplo, "new Date(2008,1,28,0,31,26)", a API aceita uma representação JSON válida de datas como uma string no seguinte formato: Date(year, month, day[,hour, minute, second[, millisecond]]), em que tudo após o dia é opcional e os meses são baseados em zero.

 

Como otimizar respostas JSON

Se um cliente faz duas solicitações e os dados não mudam entre elas, faz sentido não reenviar os dados, porque isso desperdiçaria largura de banda. Para tornar as solicitações mais eficientes, o protocolo é compatível com o armazenamento em cache dos dados no cliente e com o envio de um sinal na resposta caso os dados não tenham sido alterados desde a última solicitação. Veja como funciona:

  1. O cliente envia uma solicitação à fonte de dados.
  2. A fonte de dados gera um DataTable e um hash do objeto DataTable e retorna ambos na resposta (o hash é retornado no parâmetro tqx.sig). O cliente da API de visualização do Google armazena em cache os valores DataTable e sig.
  3. O cliente envia outra solicitação de dados, incluindo o valor tqx.sig armazenado em cache.
  4. A fonte de dados pode responder de duas maneiras:
    • Se os dados tiverem sido alterados em relação à solicitação anterior, a fonte de dados retornará o novo DataTable e o novo hash do valor sig.
    • Se os dados da solicitação anterior não tiverem sido modificados, a fonte de dados enviará status=error, reason=not_modified, sig=old_sig_value.
  5. Em ambos os casos, a página que hospeda o gráfico recebe uma resposta bem-sucedida e pode recuperar DataTable chamando QueryResponse.getDataTable(). Se os dados forem os mesmos, serão apenas a versão armazenada em cache da tabela.

Isso só funciona para solicitações JSON de gráficos criados na API de visualização do Google.

Formato da resposta CSV

Se a solicitação especificar out:csv, a resposta não incluirá metadados, mas simplesmente uma representação CSV dos dados. Uma tabela CSV geralmente é uma lista separada por vírgulas, em que cada linha de dados é uma lista de valores separados por vírgulas, terminando em um caractere de nova linha UNIX (\n). Os valores das células precisam ter o mesmo tipo em todas as colunas. A primeira linha contém os rótulos da coluna. Aqui está um exemplo de uma tabela de três linhas e três colunas:

A, B, C
1.0, "yes", true
2.0, "no", false
3.0, "maybe", true

O formato CSV não é especificado por esse protocolo. A fonte de dados é responsável por definir o formato CSV. No entanto, um formato comum é um conjunto de valores separados por vírgulas (sem espaços intermediários) e uma nova linha (\n) no final de cada linha. Quando um navegador recebe uma resposta de string CSV, ele pode perguntar ao usuário qual aplicativo usar para abrir a string ou simplesmente renderizá-la na tela. As bibliotecas de código aberto Java e Python oferecem um método para converter um DataTable em uma string CSV.

Se a solicitação incluir um membro outFileName do parâmetro tqx , tente incluir o nome do arquivo especificado nos cabeçalhos de resposta.

O objeto google.visualization.Query não aceita uma solicitação de resposta CSV. Se um cliente quiser solicitar o CSV, você pode incorporar um gadget da barra de ferramentas de visualização à sua página, ou ele pode usar um código personalizado para criar a solicitação. Também é possível fornecer um link que defina explicitamente a propriedade out:csv de tqx, conforme mostrado no seguinte URL de solicitação:

Solicitação

http://www.example.com/mydatasource?tqx=reqId:1;out:csv

Resposta

Label 1,Label2\n1,a\n2,b\n3,c\n4,d

Formato da resposta TSV

Se a solicitação especificar out:tsv-excel, a resposta não incluirá metadados, mas apenas uma representação separada por tabulação dos dados, codificada em utf-16. Se a solicitação incluir um membro outFileName do parâmetro tqx , tente incluir o nome do arquivo especificado nos cabeçalhos de resposta.

Formato da resposta HTML

Se a solicitação especificar out:html, a resposta deverá ser uma página HTML que defina uma tabela HTML com os dados. Isso é útil para depurar o código, porque o navegador pode renderizar o resultado em um formato legível diretamente. Não é possível enviar uma consulta para uma resposta HTML usando o objeto google.visualization.Query. Crie uma consulta para receber uma resposta HTML usando um código personalizado ou digitando um URL semelhante a este no navegador:

Solicitação

http://www.example.com/mydatasource?tqx=reqId:1;out:html

Resposta

<html><body><table border='1' cellpadding='2' cellspacing='0'><tr style='font-weight: bold; background-color: #aaa;'><td>label 1</td><td>label 2</td></tr><tr bgcolor='#f0f0f0'><td align='right'>1</td><td>a</td></tr><tr bgcolor='#ffffff'><td align='right'>2</td><td>b</td></tr><tr bgcolor='#f0f0f0'><td align='right'>3</td><td>c</td></tr><tr bgcolor='#ffffff'><td align='right'>4</td><td>d</td></tr></table></body></html>

Exemplos

Aqui estão alguns exemplos de solicitações e respostas. As solicitações não tiveram escape de URL. Isso geralmente é feito pelo navegador ou pelo objeto google.visualization.Query.

Solicitação simples: retorna as informações básicas com uma tabela de três colunas e quatro linhas.

Request:
http://www.example.com/mydatasource

Response
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'5982206968295329967',table:{cols:[{id:'Col1',label:'',type:'number'},{id:'Col2',label:'',type:'number'},{id:'Col3',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]},{c:[{v:2.0,f:'2'},{v:3.0,f:'3'},{v:4.0,f:'4'}]},{c:[{v:3.0,f:'3'},{v:4.0,f:'4'},{v:5.0,f:'5'}]},{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]}]}});

Solicitação simples com um gerenciador de resposta: retorna uma tabela de três colunas e três linhas com diferentes tipos de dados.

Request:
http://www.example.com/mydatasource?tqx=responseHandler:myHandlerFunction

Response
myHandlerFunction({version:'0.6',reqId:'0',status:'ok',sig:'4641982796834063168',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]},{c:[{v:'b'},{v:2.0,f:'2'},{v:new Date(2008,2,30,0,31,26),f:'3/30/08 12:31 AM'}]},{c:[{v:'c'},{v:3.0,f:'3'},{v:new Date(2008,3,30,0,31,26),f:'4/30/08 12:31 AM'}]}]}});

Consulta com uma string de consulta simples: solicitação de uma única coluna retorna uma única coluna com quatro linhas.

Request:
http://www.example.com/mydatasource?tq=select Col1

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'6099996038638149313',table:{cols:[{id:'Col1',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'}]},{c:[{v:2.0,f:'2'}]},{c:[{v:3.0,f:'3'}]},{c:[{v:1.0,f:'1'}]}]}});

Erro de dados não modificados:exemplo de um erro not_modified.

Request:
http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});

Aviso de dados truncados:exemplo de um aviso data_truncated. Observe que a solicitação ainda retorna dados.

Request:
http://www.example.com/mydatasource?tq=limit 1

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'warning',warnings:[{reason:'data_truncated',message:'Retrieved data was truncated'}],sig:'1928724788649668508',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]}]}});

Erro de acesso negado: exemplo de um erro access_denied.

Request:
http://www.example.com/mydatasource

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'access_denied',message:'Access denied',detailed_message:'Access Denied'}]});

String de consulta inválida: exemplo de uma solicitação com uma string de consulta inválida. A mensagem detalhada é genérica, e não a mensagem de erro real.

Request:
http://www.example.com/mydatasource?tq=select A

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'invalid_query',message:'Invalid query',detailed_message:'Bad query string.'}]});

Ferramentas para Desenvolvedores

  • Biblioteca Java de fontes de dados (do Google): gerencia a solicitação e a resposta, cria a tabela de resposta com base nos dados fornecidos e implementa a linguagem de consulta SQL das Ferramentas de gráficos do Google.
  • Biblioteca de fontes de dados Python (do Google): cria uma tabela de resposta que gera a sintaxe de resposta. Não lida com a análise da solicitação ou a implementação da linguagem de consulta SQL das Ferramentas de gráficos do Google.
  • MC-Google_Visualization (terceiros): é uma biblioteca PHP do lado do servidor que pode ser usada para implementar uma fonte de dados de ferramentas de gráficos para os mecanismos de banco de dados MySQL, SQLite e PostgreSQL usando PDO.
  • bortosky-google-visualization (terceiro): é uma biblioteca auxiliar para criar uma tabela de dados da API de visualização do Google para usuários .NET.
  • GV Streamer (terceiro): o GV Streamer é uma ferramenta do lado do servidor que pode converter dados de diferentes fontes em respostas de consulta válidas para os gráficos do Google. O GV Streamer é compatível com várias linguagens (por exemplo, PHP, Java, .NET) e diversas fontes de dados brutos (por exemplo, MySql).
  • TracGViz (terceiro): o TracGViz é uma ferramenta de código aberto e sem custo financeiro que fornece componentes para que ele possa usar gadgets de gráficos e implementar dados gerenciados por ele como uma fonte de dados das Ferramentas de gráfico do Google.
  • vis-table (terceiro): uma biblioteca que implementa uma fonte de dados das ferramentas de gráficos do Google em PHP. Ele tem três partes principais. A própria implementação da tabela de dados, o analisador da linguagem de consulta e os formatadores.
  • Implementação da fonte de dados do Google no Oracle PL/SQL (terceiros): um pacote Oracle PL/SQL que permite que o Oracle disponibilize fontes de dados diretamente do banco de dados. Basicamente, você pode usar qualquer consulta Oracle como uma fonte de dados das Ferramentas de gráfico do Google (o pacote retornará um arquivo JSON com os dados). e oferece suporte quase total para a linguagem de consulta do Google.