Introducción al SDK de Embed

El SDK de Embed de Looker es una biblioteca de funciones que puedes agregar al código de tu aplicación web basada en el navegador para administrar los paneles incorporados, las vistas y las exploraciones en tu app web. El SDK de Embed facilita la incorporación de las siguientes maneras:

  • Proporcionar el encapsulamiento del contenido incorporado sin necesidad de crear elementos HTML de forma manual
  • Proporcionar comunicación punto a punto para que no haya comunicación entre fotogramas. El SDK de Embed controla los mensajes multidominio que se pasan entre la página web host y el contenido incorporado de Looker mediante un canal de mensajes dedicado.

Sin el SDK de Embed, puedes invocar eventos en el contenido incorporado de Looker o responder a ellos mediante eventos de JavaScript, como dashboard:run:start o page:changed, que se describen en la página de documentación Eventos incorporados de JavaScript. Los desarrolladores que incorporan contenido de Looker con eventos de JavaScript deben crear los elementos HTML para alojar el contenido incorporado y basarse en los eventos de transmisión de ventanas para las comunicaciones entre la app web y el contenido incorporado.

Ten en cuenta que el SDK de Looker Embed es diferente de la API de Looker y el SDK de la API de Looker:

  • El SDK de Looker Embed se aloja en el código del cliente de tu aplicación web y administra el contexto y el contenido de incorporación de Looker. (El SDK de Embed no proporciona acceso a la API de Looker).
  • La API de Looker reside en el servidor con tu instancia de Looker y ejecuta comandos en él.
  • Los SDKs de cliente de la API de Looker residen en el código de aplicaciones que no son de navegador para proporcionar un acceso fácil a las funciones de la API de Looker.

Ten en cuenta que Looker no controla el orden en el que los navegadores envían eventos a las aplicaciones web. Esto significa que el orden de los eventos no se garantiza en todos los navegadores o plataformas. Asegúrate de escribir tu JavaScript correctamente para tener en cuenta el manejo de eventos de diferentes navegadores.

Ejemplo rápido

En este ejemplo, se construye un contexto de incorporación de Looker, se inserta en un elemento DOM con el ID dashboard y, luego, se muestra un panel con el ID 11 en el contexto de incorporación de Looker. Los eventos dashboard:run:start y dashboard:run:complete se usan para actualizar el estado de la IU de la ventana de incorporación, y se asigna una secuencia de comandos a un botón con un ID de run para enviar un mensaje dashboard:run al panel.

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)
  })

Puedes encontrar un ejemplo más completo en la página de documentación de la demostración del SDK de Embed.

Configura el SDK de Looker Embed

El SDK de Looker Embed usa un patrón de interfaz fluido. Una vez que instales el SDK de Embed, deberás compilar el contenido incorporado y conectarte a él.

Cómo instalar el SDK de Embed

Puedes obtener la biblioteca del SDK de Embed de Looker a través del administrador de paquetes de nodos (NPM) en https://www.npmjs.com/package/@looker/embed-sdk. Sin embargo, si quieres ver el código de muestra o la demostración, debes usar el repositorio del SDK de Looker Embed.

Para instalar el SDK de Looker Embed con el repositorio del SDK de Looker Embed, haz lo siguiente:

  1. Instala Node.js si aún no lo tienes.
  2. Descarga o clona el repositorio de /looker-open-source/embed-sdk.
  3. En una ventana de terminal, navega al directorio /embed-sdk y ejecuta estos comandos:
npm install
npm start

Creación del contenido incorporado

Primero, inicializa el SDK con la dirección de tu servidor web y, de manera opcional, el extremo de tu servidor que realizará la autenticación. Todo el contenido incorporado las usa.

Si es necesario, incluye el número de puerto para conectarse al servidor de Looker desde los clientes de navegador. Por ejemplo: looker.example.com:443.

LookerEmbedSDK.init('looker.example.com', '/auth')

Luego, el contenido incorporado se compila mediante una serie de pasos para definir sus parámetros. Algunos de estos parámetros son opcionales y otros son obligatorios.

El proceso comienza con la creación del compilador con un id de panel o un url que haga referencia a un panel (creado por el proceso que se describe en la página de documentación Incorporación firmada).

LookerEmbedSDK.createDashboardWithId(id)

o

LookerEmbedSDK.createDashboardWithUrl(url)

Luego, puedes agregar atributos adicionales al compilador para completar la configuración. Por ejemplo, puedes especificar en qué lugar de tu página web insertar la IU incorporada de Looker. En la siguiente llamada, se coloca la IU incorporada de Looker dentro de un elemento HTML con un valor de ID de dashboard:

.appendTo('#dashboard')

Puedes agregar controladores de eventos de la siguiente manera:

.on('dashboard:run:start',
  () => updateState('#dashboard-state', 'Running')
)
.on('dashboard:run:complete',
  () => updateState('#dashboard-state', 'Done')
)

Para terminar, compila el elemento incorporado:

.build()

Cómo conectarse al contenido incorporado

Si deseas enviar y recibir mensajes del elemento incorporado, debes llamar a connect(), que muestra una promesa que se resuelve en la interfaz de comunicación del elemento dado:

.connect()
.then(setupDashboard)
.catch(console.error)

Cómo compilar URLs para el SDK

La documentación principal de las URLs de incorporación firmadas de Looker se encuentra en la página de documentación de Incorporación firmada. La única diferencia a la hora de crear URLs para el SDK es que deberás agregar un parámetro sdk=2 a la URL de incorporación junto con otros parámetros, como los filtros y el parámetro embed_domain. Este parámetro permite que Looker determine si el SDK está presente y aproveche las funciones adicionales que proporciona el SDK. Por ejemplo:

/embed/looks/4?embed_domain=https://mywebsite.com&sdk=2
                                                 ^^^^^^

El SDK no puede agregar este parámetro porque forma parte de la URL de incorporación firmada.

El extremo de Auth

Debido a que el secreto de incorporación se debe proteger cuidadosamente, las URLs de incorporación firmadas no se pueden crear en el navegador. Para que el proceso sea más fácil y seguro, puedes seguir estos pasos:

  1. Implementa una función de firma de URL en tu servidor web. El servidor debe mostrar una URL firmada con uno de los procesos documentados en el repositorio de GitHub Ejemplos de SSO de incorporación de Looker.
  2. Pasa la URL incorporada firmada a ese extremo de firma en el SDK de Embed. La ubicación del extremo se especifica mediante el parámetro authUrl en LookerEmbedSDK.init().

Si se especifica, cada vez que se crea un elemento incorporado solo con un ID, su URL de incorporación se genera con el tipo de elemento, el host de Looker proporcionado y cualquier parámetro proporcionado. Por ejemplo:

LookerEmbedSDK.init('looker.example.com', '/looker_auth')
LookerEmbedSDK.createcreateDashboardWithId(11)
  .build()

En el ejemplo anterior, se llamará al extremo /looker_auth y se mostrará una URL incorporada firmada que se puede usar para crear el contenido incorporado:

src=https://looker.example.com/embed/dashboards/11?sdk=2&embed_host=https://yourhost.example.com

Configuración de autenticación avanzada

El extremo de autenticación se puede configurar aún más para permitir encabezados de solicitud personalizados, así como la compatibilidad con CORS. Para ello, pasa un objeto de opciones al 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
  })

Asistente de nodo

En server_utils/auth_utils.ts, se proporciona un método auxiliar de firma createSignedUrl(). Se utiliza de la siguiente manera:

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 es la estructura de datos del usuario:

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: {}
}

El parámetro access_filters se quitó en Looker 3.10, pero aún es obligatorio con un marcador de posición vacío en la URL incorporada.

Soluciona problemas

Logging

El SDK de Embed se basa en lo conversacional. Chatty usa debug para el registro. Puedes habilitar el registro en la consola del navegador con 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 = ''