O SDK incorporado do Looker é uma biblioteca de funções que pode ser adicionada ao código do seu aplicativo da Web baseado em navegador para gerenciar painéis, aparências e explorações incorporadas no seu app da Web. O SDK incorporado facilita a incorporação das seguintes maneiras:
- Fornecer o encapsulamento do conteúdo incorporado sem a necessidade de criar manualmente elementos HTML.
- Oferecer comunicação ponto a ponto para que não haja comunicação entre os frames. O SDK incorporado lida com a transmissão de mensagens de vários domínios entre a página da Web do host e o conteúdo incorporado do Looker, usando um canal de mensagem dedicado.
Sem o SDK incorporado, é possível invocar ou responder a eventos no conteúdo incorporado do Looker usando eventos JavaScript, como dashboard:run:start
ou page:changed
, descritos na página de documentação Eventos JavaScript incorporados. Os desenvolvedores que incorporam conteúdo do Looker com eventos JavaScript precisam criar os elementos HTML para abrigar o conteúdo incorporado e contar com eventos de transmissão de janela para comunicações entre o app da Web e o conteúdo incorporado.
O SDK incorporado do Looker é diferente da API Looker e da API Looker API:
- O SDK incorporado do Looker fica no código do cliente do seu aplicativo da Web e gerencia o conteúdo e o contexto incorporado. O SDK incorporado não dá acesso à API Looker.
- A Looker API reside no servidor com sua instância do Looker e executa comandos no servidor do Looker.
- Os SDKs cliente da API Looker residem no código de aplicativos que não são navegadores para fornecer acesso fácil às funções da API Looker.
O Looker não controla a ordem em que os navegadores enviam eventos para aplicativos da Web. Isso significa que a ordem dos eventos não é garantida em navegadores ou plataformas. Escreva seu JavaScript corretamente para lidar com o tratamento de eventos de diferentes navegadores.
Exemplo rápido
Este exemplo cria um contexto de incorporação do Looker, insere-o em um elemento DOM com um ID dashboard
e exibe um painel com um ID 11
no contexto de incorporação do Looker. Os eventos dashboard:run:start
e dashboard:run:complete
são usados para atualizar o estado da UI da janela de incorporação, e um botão com um ID run
é programado para enviar uma mensagem dashboard:run
ao painel.
LookerEmbedSDK.init('looker.example.com', '/auth')
const setupDashboard = (dashboard) => {
document.querySelector('#run').addEventListener('click', () => {
dashboard.send('dashboard:run')
})
}
LookerEmbedSDK.createDashboardWithId(11)
.appendTo('#dashboard')
.on('dashboard:run:start',
() => updateState('#dashboard-state', 'Running')
)
.on('dashboard:run:complete',
() => updateState('#dashboard-state', 'Done')
)
.build()
.connect()
.then(setupDashboard)
.catch((error: Error) => {
console.error('An unexpected error occurred', error)
})
Um exemplo mais completo está descrito na página de documentação Demonstração do SDK incorporado.
Como configurar o SDK incorporado do Looker
O SDK incorporado do Looker usa um padrão de interface fluente. Depois de instalar o SDK incorporado, crie o conteúdo incorporado e conecte-o ao conteúdo incorporado.
Como instalar o SDK incorporado
Para acessar a biblioteca do SDK incorporado do Looker, acesse o Gerenciador de pacotes de nós (NPM, na sigla em inglês) em https://www.npmjs.com/package/@looker/embed-sdk. No entanto, se você quiser ver o exemplo de código ou a demonstração, use o repositório do SDK incorporado do Looker.
Para instalar o SDK incorporado do Looker usando o repositório do SDK incorporado do Looker:
- Instale o Node.js, caso ainda não o tenha.
- Faça o download ou clone o repositório do
/looker-open-source/embed-sdk
. - Em uma janela de terminal, navegue até o diretório
/embed-sdk
e execute estes comandos:
npm install
npm start
Como criar o conteúdo incorporado
Primeiro, inicialize o SDK com o endereço do seu servidor da Web e, opcionalmente, o endpoint no servidor que executará a autenticação. Eles são usados por todo o conteúdo incorporado.
Inclua o número da porta se for necessário entrar em contato com o servidor do Looker usando clientes do navegador. Por exemplo:
looker.example.com:443
LookerEmbedSDK.init('looker.example.com', '/auth')
Em seguida, o conteúdo incorporado é criado usando uma série de etapas para definir os parâmetros dele. Alguns desses parâmetros são opcionais, outros são obrigatórios.
O processo começa com a criação do builder com um painel id
ou um url
que se refere a um painel (criado pelo processo descrito na página de documentação Incorporação de Logon único (SSO)).
LookerEmbedSDK.createDashboardWithId(id)
ou
LookerEmbedSDK.createDashboardWithUrl(url)
Em seguida, é possível adicionar outros atributos ao builder para concluir a configuração. Por exemplo, é possível especificar em que parte da página a inserção da UI incorporada do Looker. A chamada a seguir coloca a UI incorporada do Looker em um elemento HTML com um valor de ID de dashboard
:
.appendTo('#dashboard')
Você pode adicionar manipuladores de eventos:
.on('dashboard:run:start',
() => updateState('#dashboard-state', 'Running')
)
.on('dashboard:run:complete',
() => updateState('#dashboard-state', 'Done')
)
Para finalizar, crie o elemento incorporado:
.build()
Como se conectar ao conteúdo incorporado
Se você quiser enviar e receber mensagens do elemento incorporado, será necessário chamar connect()
, que retorna uma promessa que é resolvida na interface de comunicação do elemento especificado:
.connect()
.then(setupDashboard)
.catch(console.error)
Como criar URLs para o SDK
A documentação principal dos URLs de incorporação de SSO do Looker está na página de incorporação de Logon único (SSO). A única diferença ao criar URLs para o SDK é que você precisará adicionar um parâmetro sdk=2
ao URL incorporado junto com outros parâmetros, como filtros e embed_domain
. Esse parâmetro permite que o Looker determine se o SDK está presente e aproveite os recursos adicionais fornecidos por ele. Exemplo:
/embed/looks/4?embed_domain=https://mywebsite.com&sdk=2
^^^^^^
O próprio SDK não pode adicionar esse parâmetro porque faz parte do URL de SSO assinado.
Endpoint de autenticação
Como o segredo de incorporação precisa ser cuidadosamente protegido, os URLs de SSO incorporados não podem ser criados no navegador. Para tornar o processo mais fácil e seguro, faça o seguinte:
- Implemente uma função de assinatura de URL no seu servidor da Web. O servidor retornará um URL assinado usando um dos processos documentados no repositório GitHub de exemplos de SSO do Looker.
- Transmita o URL do SSO incorporado a esse endpoint de assinatura no SDK incorporado. O local do endpoint é especificado pelo parâmetro
authUrl
emLookerEmbedSDK.init()
.
Se especificado, sempre que um elemento incorporado for criado usando apenas um ID, o URL incorporado dele será gerado usando o tipo do elemento, o host do Looker fornecido e todos os parâmetros fornecidos. Exemplo:
LookerEmbedSDK.init('looker.example.com', '/looker_auth')
LookerEmbedSDK.createcreateDashboardWithId(11)
.build()
Isso chamará o endpoint /looker_auth
e retornará um URL de SSO assinado que pode ser usado para criar o conteúdo incorporado:
src=https://looker.example.com/embed/dashboards/11?sdk=2&embed_host=https://yourhost.example.com
Configuração de autenticação avançada
O endpoint de autenticação pode ser configurado para permitir cabeçalhos de solicitação personalizados e suporte a CORS. Para fazer isso, transmita um objeto de opções para o método init
:
LookerEmbedSDK.init('looker.example.com',
{
url: 'https://api.acme.com/looker/auth',
headers: [{'name': 'Foo Header', 'value': 'Foo'}],
params: [{'name': 'foo', 'value': 'bar'}],
withCredentials: true // Needed for CORS requests to Auth endpoint include Http Only cookie headers
})
Auxiliar de nó
Um método auxiliar de assinatura createSignedUrl()
é fornecido em server_utils/auth_utils.ts
. Seu uso é o seguinte:
import { createSignedUrl } from './auth_utils'
app.get('/looker_auth', function(req, res) {
// TO DO: Add your code here to authenticate that the request is from a valid user
const src = req.query.src;
const host = 'https://looker.example.com'
const secret = YOUR_EMBED_SECRET
const user = authenticatedUser
const url = createSignedUrl(src, user, host, secret);
res.json({ url });
});
Esta é a estrutura de dados do usuário:
interface LookerEmbedUser {
external_user_id: string
first_name?: string
last_name?: string
session_length: number
force_logout_login?: boolean,
permissions: LookerUserPermission[]
models: string[]
group_ids?: number[]
external_group_id?: string
user_attributes?: {[key: string]: any}
access_filters: {}
}
O parâmetro
access_filters
foi removido no Looker 3.10, mas ainda é necessário com um marcador vazio no URL incorporado.
Solução de problemas
Geração de registros
O SDK incorporado foi criado usando o chatty. O Chatty usa debug para gerar registros. Ative o registro em um console do navegador com este comando:
localStorage.debug = 'looker:chatty:*'
```none
Note that both the parent window and the embedded content have separate local storage, so you can enable logging on one, the other, or both. You can disable logging with this command:
```javascript
localStorage.debug = ''