Lookers Embed SDK ist eine Funktionsbibliothek, die Sie zum Code Ihrer browserbasierten Webanwendung hinzufügen können, um eingebettete Dashboards, Looks und Explores in Ihrer Webanwendung zu verwalten. Das Embed SDK ermöglicht die Einbettung auf folgende Weise:
- Die Kapselung des eingebetteten Inhalts, ohne dass HTML-Elemente manuell erstellt werden müssen.
- Point-to-Point-Kommunikation, damit keine Frame-übergreifende Kommunikation erfolgt. Das Embed SDK verarbeitet die domainübergreifende Nachrichtenübertragung zwischen Ihrer Host-Webseite und Ihren eingebetteten Looker-Inhalten und nutzt dabei einen speziellen Nachrichtenkanal.
Ohne das Embed SDK können Sie Ereignisse in eingebetteten Looker-Inhalten mithilfe von JavaScript-Ereignissen wie dashboard:run:start
oder page:changed
aufrufen oder darauf reagieren. Diese werden auf der Dokumentationsseite Eingebettete JavaScript-Ereignisse beschrieben. Entwickler, die Looker-Inhalte mit JavaScript-Ereignissen einbetten, müssen die HTML-Elemente zur Aufnahme der eingebetteten Inhalte erstellen und sich auf Fenster-Broadcast-Ereignisse für die Kommunikation zwischen der Webanwendung und dem eingebetteten Inhalt verlassen.
Das Looker Embed SDK unterscheidet sich von der Looker API und dem Looker API SDK:
- Das Looker Embed SDK befindet sich im clientseitigen Code Ihrer Webanwendung und verwaltet den Looker-Einbettungskontext und die Looker-Inhalte. Das Embed SDK bietet keinen Zugriff auf die Looker API.
- Die Looker API befindet sich auf dem Server Ihrer Looker-Instanz und führt Befehle auf dem Looker-Server aus.
- Looker API-Client-SDKs befinden sich im Code von nicht browsergestützten Anwendungen, um einfachen Zugriff auf Looker API-Funktionen zu ermöglichen.
Die Reihenfolge, in der Browser Ereignisse an Webanwendungen senden, wird nicht von Looker gesteuert. Das bedeutet, dass die Reihenfolge der Ereignisse nicht plattform- oder browserübergreifend garantiert ist. Achten Sie darauf, Ihr JavaScript so zu schreiben, dass die Ereignisbehandlung in verschiedenen Browsern berücksichtigt wird.
Kurzes Beispiel
In diesem Beispiel wird ein Looker-Embedding-Kontext erstellt, in ein DOM-Element mit der ID dashboard
eingefügt und dann ein Dashboard mit der ID 11
im Looker-Embedding-Kontext angezeigt. Mit den Ereignissen dashboard:run:start
und dashboard:run:complete
wird der Status der Benutzeroberfläche des Einbettungsfensters aktualisiert. Eine Schaltfläche mit der ID run
ist so programmiert, dass eine dashboard:run
-Nachricht an das Dashboard gesendet wird.
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)
})
Ein vollständigeres Beispiel findest du auf der Dokumentationsseite Embed SDK-Demo.
Looker Embed SDK einrichten
Das Looker Embed SDK verwendet ein Fluent-Interface-Muster. Nach der Installation des Embed SDK erstellen Sie den eingebetteten Inhalt und stellen eine Verbindung zu den eingebetteten Inhalten her.
Embed SDK installieren
Die Embed SDK-Bibliothek von Looker erhalten Sie über den Node Package Manager (NPM) unter https://www.npmjs.com/package/@looker/embed-sdk. Wenn Sie sich den Beispielcode oder die demo ansehen möchten, sollten Sie stattdessen das Repository des Looker Embed SDK verwenden.
So installieren Sie das Looker Embed SDK mit dem Looker Embed SDK-Repository:
- Installieren Sie Node.js, falls noch nicht geschehen.
- Laden Sie das
/looker-open-source/embed-sdk
-Repository herunter oder klonen Sie es. - Gehen Sie in einem Terminalfenster zum Verzeichnis
/embed-sdk
und führen Sie die folgenden Befehle aus:
npm install
npm start
Eingebettete Inhalte erstellen
Initialisieren Sie zunächst das SDK mit der Adresse Ihres Webservers und optional dem Endpunkt auf Ihrem Server, der die Authentifizierung durchführt. Sie werden von allen eingebetteten Inhalten verwendet.
Geben Sie die Portnummer an, wenn der Looker-Server von Browserclients erreicht werden muss. Beispiel:
looker.example.com:443
LookerEmbedSDK.init('looker.example.com', '/auth')
Anschließend wird der eingebettete Inhalt mit einer Reihe von Schritten zur Definition der Parameter erstellt. Einige dieser Parameter sind optional, andere obligatorisch.
Zuerst erstellen Sie den Builder entweder mit einem Dashboard id
oder mit einem url
, das auf ein Dashboard verweist, das mit dem auf der Dokumentationsseite Signierte Einbettung beschriebenen Verfahren erstellt wurde.
LookerEmbedSDK.createDashboardWithId(id)
oder
LookerEmbedSDK.createDashboardWithUrl(url)
Anschließend können Sie dem Builder zusätzliche Attribute hinzufügen, um die Einrichtung abzuschließen. Sie können beispielsweise angeben, wo auf Ihrer Webseite die Looker-Einbettungs-UI eingefügt werden soll. Mit dem folgenden Aufruf wird die Looker-Benutzeroberfläche in ein HTML-Element mit der ID dashboard
eingebettet:
.appendTo('#dashboard')
Sie können Event-Handler hinzufügen:
.on('dashboard:run:start',
() => updateState('#dashboard-state', 'Running')
)
.on('dashboard:run:complete',
() => updateState('#dashboard-state', 'Done')
)
Erstellen Sie zum Abschluss das eingebettete Element:
.build()
Verbindung zum eingebetteten Inhalt herstellen
Wenn Sie Nachrichten an das eingebettete Element senden und von ihm empfangen möchten, müssen Sie connect()
aufrufen. Dadurch wird ein Promise zurückgegeben, das auf die Kommunikationsschnittstelle des jeweiligen Elements verweist:
.connect()
.then(setupDashboard)
.catch(console.error)
URLs für das SDK erstellen
Die Hauptdokumentation zu signierten Looker-Einbettungs-URLs finden Sie auf der Dokumentationsseite Signierte Einbettung. Der einzige Unterschied beim Erstellen von URLs für das SDK besteht darin, dass du der eingebetteten URL neben anderen Parametern wie Filtern und dem Parameter embed_domain
einen sdk=2
-Parameter hinzufügen musst. Anhand dieses Parameters kann Looker feststellen, ob das SDK vorhanden ist, und zusätzliche Funktionen nutzen, die vom SDK bereitgestellt werden. Beispiel:
/embed/looks/4?embed_domain=https://mywebsite.com&sdk=2
^^^^^^
Das SDK kann diesen Parameter nicht selbst hinzufügen, da er Teil der signierten Embed-URL ist.
Den Authentifizierungsendpunkt
Da das Einbettungs-Secret sorgfältig geschützt werden muss, können signierte Einbettungs-URLs nicht im Browser erstellt werden. Um den Vorgang einfacher und sicherer zu gestalten, können Sie stattdessen auch die folgenden Schritte ausführen:
- Implementieren Sie eine URL-Signaturfunktion auf Ihrem Webserver. Der Server sollte eine signierte URL mithilfe eines der Prozesse zurückgeben, die im GitHub-Repository Beispiele für die Looker-Einbettung von SSO dokumentiert sind.
- Übergeben Sie die signierte Einbettungs-URL an diesen Signaturendpunkt im Embed SDK. Der Speicherort des Endpunkts wird durch den Parameter
authUrl
inLookerEmbedSDK.init()
angegeben.
Wenn angegeben, wird jedes Mal, wenn ein eingebettetes Element nur mit einer ID erstellt wird, die Einbettungs-URL anhand des Elementtyps, des bereitgestellten Looker-Hosts und aller bereitgestellten Parameter generiert. Beispiel:
LookerEmbedSDK.init('looker.example.com', '/looker_auth')
LookerEmbedSDK.createcreateDashboardWithId(11)
.build()
Im vorherigen Beispiel wird der /looker_auth
-Endpunkt aufgerufen und eine signierte Einbettungs-URL zurückgegeben, die zum Erstellen der eingebetteten Inhalte verwendet werden kann:
src=https://looker.example.com/embed/dashboards/11?sdk=2&embed_host=https://yourhost.example.com
Erweiterte Authentifizierungskonfiguration
Der Authentifizierungsendpunkt kann weiter konfiguriert werden, um benutzerdefinierte Anfrageheader sowie CORS-Unterstützung zuzulassen. Dazu übergeben Sie ein Optionsobjekt an die Methode 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
})
Node Helper
Eine Signierhilfemethode createSignedUrl()
wird in server_utils/auth_utils.ts
bereitgestellt. Es wird wie folgt verwendet:
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 });
});
Das ist die Struktur der Nutzerdaten:
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: {}
}
Der Parameter
access_filters
wurde in Looker 3.10 entfernt, ist aber weiterhin mit einem leeren Platzhalter in der Einbettungs-URL erforderlich.
Fehlerbehebung
Logging
Das Embed SDK basiert auf chatty. Chatty verwendet debug für die Protokollierung. Mit diesem Befehl können Sie die Protokollierung in einer Browserkonsole aktivieren:
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 = ''