Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
O GraphQL tem ganhado cada vez mais adesão para construção de APIs Web, sendo uma alternativa para arquiteturas REST.
O GraphQL é uma linguagem de consulta para APIs criada pelo Facebook, que pode ser usado com qualquer framework ou linguagem de programação, facilitando o processo de requisições de dados. Diversas limitações do modelo REST são resolvidos do GraphQL que independe de codificação dos recursos para se adaptar às mudanças na fonte de dados, permitindo enorme liberdade para escolher quais dados deseja recuperar.
O GraphQL possuí interessantes funcionalidades como: queries (operações de consulta de dados com uma liberdade jamais vista no modelo REST), mutations (utilizadas quando desejamos inserir ou alterar dados em nossa API) e subscriptions (torna possível reagir a modificações de informações na fonte de dados dentro dos clientes de uma API GraphQL em tempo real).
Outro aspecto importante do GraphQL é que ele não é acoplado com nenhuma tecnologia de armazenamento de dados. Para uma mesma API GraphQL, você pode ter diferentes resolvers (Ex: um para Hadoop, outro para PortgreSQL e outro para arquivos flats como CSV).
O GraphQL é orientado aos schemas o que permite mudanças sem que isso impacte em novos recursos ou em versionamentos de API, mitigando uma possível quebra entre o servidor da API e seus clientes. Adicione novos campos e tipos à sua API do GraphQL sem afetar as consultas existentes. Os campos antigos podem ser preteridos e ocultos das ferramentas. Usando uma única versão em evolução, as APIs GraphQL oferecem aos aplicativos acesso contínuo a novos recursos e incentivam códigos de servidor mais limpos e mais fáceis de manter.
Maiores informação em https://graphql.org.
E como acessar dados de uma fonte GraphQL no Qlik Sense?
Com o uso cada vez maior do GraphQL como fonte de dados, vamos apresentar neste post como realizar uma carga de dados de uma fonte GraphQL.
Nos exemplos abaixo, vamos usar uma fonte GraphQL (http://localhost:5000/graphql), que possui 2 conjuntos/tabelas de dados:
estados
id (int) --Chave única do registro e Código IBGE do estado
nome_uf (text) --Nome do estado
uf (text) --Sigla do estado
municipios
id (int) --Chave única do registro
uf_id (int) --Foreing key para estados(id)
cod_municipio (int) --Código IBGE do municipio
nome_municipio (text) --Nome do munícipio
Já que não temos no Qlik Sense um conector focado na tecnologia GraphQL, iremos utilizar o conector REST.
A URL de todas as conexões de uma mesma fonte GraphQL serão em geral iguais, mesmo para requisições diferentes. No nosso exemplo vamos usar um servidor local cuja URL é http://localhost:5000/graphql.
IMPORTANTE: Na criação da conexão colocar no header (Query Headers do conector REST do QS) a chave Content-Type: application/graphql
Inicialmente, vamos fazer uma consulta para retornar todos os dados dos estados.
Nossa consulta, então será:
#Todos os Estados
query {
allEstados {
edges {
node {
id
uf
nomeUf
}
}
}
}
Minha sugestão é testar antes suas consultas GraphQL, usando ferramentas como o GraphiQL ou o velho e sempre atual Postman (que na nova versão já inclui suporte nativo ao GraphQL).
Imagem 1 - GraphiQL
imagem 2 - Postman Request
imagem 2a - Postman Request Result
Lembrando no Postman de colocar a Header key Content-Type:application/graphql:
imagem 2a - Postman GraphQL Header Key
O resultado da consulta será o seguinte json:
{
"data": {
"allEstados": {
"edges": [
{
"node": {
"id": 11,
"uf": "RO",
"nomeUf": "Rondônia"
}
},
{
"node": {
"id": 12,
"uf": "AC",
"nomeUf": "Acre"
}
},
{
"node": {
"id": 13,
"uf": "AM",
"nomeUf": "Amazonas"
}
},
.
.
.
]
}
}
}
No GraphQL, podemos determinar quais os campos que queremos recuperar. Vamos alterar o exemplo acima para trazer apenas os nomes dos estados:
#Todos os Estados - Somente o nome
query {
allEstados {
edges {
node {
nomeUf
}
}
}
}
o resultado da consulta será:
{
"data": {
"allEstados": {
"edges": [
{
"node": {
"nomeUf": "Rondônia"
}
},
{
"node": {
"nomeUf": "Acre"
}
},
{
"node": {
"nomeUf": "Amazonas"
}
},
.
.
.
}
]
}
}
}
E no Qlik Sense.... Afinal é o que nos interessa!!!
Inicialmente vamos criar uma conexão REST no Qlik Sense, chamado MyGraphyQL, com as seguintes configurações:
URL = http://localhost:5000/graphql (meu servidor GraphQL. Substitua pela url da sua fonte de dados)
Method = POST
Query headers = Name: Content-Type Value: application/graphql
Reques body = A consulta GraphQL. Neste caso:
query {
allEstados {
edges {
node {
id
uf
nomeUf
}
}
}
}
Imagem 4a, 4b, 4c - Configuração Conexão REST MyGraphQL
Uma vez criado a conexão chamada MyGraphyQL, clicar em Selecionar Dados:
Imagem 5 - icone Selecionar Dados
Então, Voalá!!
Imagem 6 - Tela de Seleção de Dados
Então o script final será:
Imagem 7 - Script Carga GraphQL no Qlik Sense
Executar a carga de dados
Imagem 8 - Execução da Carga de Dados GraphQL
E finalmente os dados obtidos via GraphQL, incorporados na nossa aplicação:
Imagem 9 - Painel Qlik Sense Com Dados Obtidos Via GraphQL
A flexibilidade de selecionar os dado em uma API GraphQL, permite fazer uma grande variação de consultas.
Se desejamos uma consulta para trazer todos os município de cada estado, basta executar a seguinte query:
#Todos os Municípios e Estados V2
query {
allMunicipios {
edges {
node {
id
estadoByUfId{
uf
nomeUf
}
nomeMunicipio
codMunicipio
}
}
}
}
O Resultado Será:
{
"data": {
"allMunicipios": {
"edges": [
{
"node": {
"id": 1,
"estadoByUfId": {
"uf": "RO",
"nomeUf": "Rondônia"
},
"nomeMunicipio": "Alta Floresta D'Oeste",
"codMunicipio": 1100015
}
},
{
"node": {
"id": 2,
"estadoByUfId": {
"uf": "RO",
"nomeUf": "Rondônia"
},
"nomeMunicipio": "Ariquemes",
"codMunicipio": 1100023
}
},
.
.
.
}
]
}
}
Se desejar apenas os municípios de Alagoas (Código IBGE = 27), ordenado pelo nome do município, usar a query a seguir:
#Todos os Municípios do Estado de Alagoas Ordenado pelo nome do município
query {
allMunicipios(condition: {ufId:27} orderBy: NOME_MUNICIPIO_ASC) {
edges {
node {
id
nomeMunicipio
codMunicipio
estadoByUfId{
uf
nomeUf
}
}
}
}
}
O resultador será:
{
"data": {
"allMunicipios": {
"edges": [
{
"node": {
"id": 1651,
"nomeMunicipio": "Água Branca",
"codMunicipio": 2700102,
"estadoByUfId": {
"uf": "AL",
"nomeUf": "Alagoas"
}
}
},
{
"node": {
"id": 1652,
"nomeMunicipio": "Anadia",
"codMunicipio": 2700201,
"estadoByUfId": {
"uf": "AL",
"nomeUf": "Alagoas"
}
}
},
.
.
.
}
]
}
}
}
Você também pode na consulta acima, fazer controle do número de registros retornados e até mesmo paginação:
#Todos os Municipios do Estado de Alagoas com controle de paginação
query {
allMunicipios(first: 5
offset: 0
condition: {ufId:27}
orderBy: NOME_MUNICIPIO_ASC) {
totalCount
pageInfo {
hasNextPage
startCursor
endCursor
}
edges {
node {
id
nomeMunicipio
codMunicipio
estadoByUfId{
uf
nomeUf
}
}
}
}
}
O resultado será:
{
"data": {
"allMunicipios": {
"totalCount": 103,
"pageInfo": {
"hasNextPage": true,
"startCursor": "WyJub21lX211bmljaXBpb19hc2MiLFsiw4FndWEgQnJhbmNhIiwxNjUxXV0=",
"endCursor": "WyJub21lX211bmljaXBpb19hc2MiLFsiQXRhbGFpYSIsMTY1NF1d"
},
"edges": [
{
"node": {
"id": 1651,
"nomeMunicipio": "Água Branca",
"codMunicipio": 2700102,
"estadoByUfId": {
"uf": "AL",
"nomeUf": "Alagoas"
}
}
},
.
.
.
}
]
}
}
}
O GraphQL deve ser cada vez mais usado, e espero que este artigo tenha ajudado a entender um pouco seu potencial e seu uso no Qlik Sense.
That's All Folks!!!! See You Later....
Alguém configurou a conexão Rest com GraphQL e usou token?
Seria ótimo se você compartilhasse informações sobre as configurações para este tipo de conexão.
No Headers da conexão Rest eu adiciono "Content-Type = application/graphql" e "Authorization = ******* "
Mais ocorre o ERRO:
RestConnectorMasterTable:
SQL SELECT
"account_id",
"__KEY_root",
(SELECT
"message",
"__FK_errors"
FROM "errors" FK "__FK_errors")
FROM JSON (wrap on) "root" PK "__KEY_root";
[errors]:
LOAD [message],
[__FK_errors] AS [__KEY_root]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__FK_errors]);
[root]:
LOAD [account_id],
[__KEY_root]
RESIDENT RestConnectorMasterTable
WHERE NOT IsNull([__KEY_root]);
DROP TABLE RestConnectorMasterTable;
Recomendo o post: Qlik Sense Data Connectivity/Load data from GraphQL
Abs e Sucesso!!
Olá @MarkimTI ,
A autorização é passada no Header. Porém tem que saber qual o tipo de autorização que sua API requer: Bearer Token, Basic Auth, etc.
Você pode passar de 2 formas: Na conexão ou no script.
Na Conexão deve ser feito desta forma (exemplo usando Bearer Token):
No Script você usa a instrução WITH CONNECTION (exemplo usando Basic Token):
...
WITH CONNECTION( Url "https://<url api>"
,HTTPHEADER "Autorization" "Basic 823rhwed8eg98TGKgssg7");