Beispielanwendungen eignen sich hervorragend, um die Headless-Funktionen von Adobe Experience Manager (AEM) zu erkunden. Diese Server-zu-Server-Anwendung zeigt, wie Sie Inhalte mithilfe AEM GraphQL-APIs mithilfe persistenter Abfragen abfragen und auf dem Terminal drucken können.
Anzeigen der Quellcode auf GitHub
Die folgenden Tools sollten lokal installiert werden:
Die Node.js-Anwendung funktioniert mit den folgenden AEM Bereitstellungsoptionen. Für alle Implementierungen ist die WKND Site v2.0.0+ installiert werden.
Diese Node.js-Anwendung kann basierend auf den Befehlszeilenparametern eine Verbindung zur AEM-Autoren- oder AEM-Veröffentlichungsinstanz herstellen.
Klonen Sie die adobe/aem-guides-wknd-graphql
repository:
$ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
Öffnen Sie ein Terminal und führen Sie die Befehle aus:
$ cd aem-guides-wknd-graphql/server-to-server-app
$ npm install
Die App kann mit dem folgenden Befehl ausgeführt werden:
$ node index.js <AEM_HOST> <OPTIONAL_SERVICE_CONFIG_FILE_PATH>
So führen Sie beispielsweise die App für AEM Publish ohne Autorisierung aus:
$ node index.js https://publish-p123-e789.adobeaemcloud.com
So führen Sie die App mit der Autorisierung für AEM Author aus:
$ node index.js https://author-p123-e456.adobeaemcloud.com ./service-config.json
Eine JSON-Liste mit Abenteuern von der WKND-Referenz-Website sollte im Terminal gedruckt werden.
Nachstehend finden Sie eine Zusammenfassung dazu, wie die Node.js-Anwendung von Server zu Server erstellt wurde, wie eine Verbindung zu AEM Headless hergestellt wird, um Inhalte mithilfe von persistenten GraphQL-Abfragen abzurufen, und wie diese Daten dargestellt werden. Den vollständigen Code finden Sie unter GitHub.
Der gängige Anwendungsfall für Server-zu-Server-AEM Headless-Apps besteht darin, Inhaltsfragmentdaten von AEM in andere Systeme zu synchronisieren. Diese Anwendung ist jedoch absichtlich einfach und druckt die JSON-Ergebnisse aus der persistenten Abfrage.
Gemäß AEM Best Practices für Headless verwendet die Anwendung AEM von GraphQL gespeicherten Abfragen, um Abenteuerdaten abzufragen. Die Anwendung verwendet zwei persistente Abfragen:
wknd/adventures-all
persistente Abfrage, die alle Abenteuer in AEM mit einer gekürzten Reihe von Eigenschaften zurückgibt. Diese beibehaltene Abfrage treibt die Erlebnisliste der ersten Ansicht an.# Retrieves a list of all adventures
{
adventureList {
items {
_path
slug
title
price
tripLength
primaryImage {
... on ImageRef {
_path
mimeType
width
height
}
}
}
}
}
const { AEMHeadless, getToken } = require('@adobe/aem-headless-client-nodejs');
async function run() {
// Parse the AEM host, and optional service credentials from the command line arguments
const args = process.argv.slice(2);
const aemHost = args.length > 0 ? args[0] : null; // Example: https://author-p123-e456.adobeaemcloud.com
const serviceCredentialsFile = args.length > 1 ? args[1] : null; // Example: ./service-config.json
// If service credentials are provided via command line argument,
// use `getToken(..)` to exchange them with Adobe IMS for an AEM access token
let accessToken;
if (serviceCredentialsFile) {
accessToken = (await getToken(serviceCredentialsFile)).accessToken;
}
// Instantiate withe AEM Headless client to query AEM GraphQL APIs
// The endpoint is left blank since only persisted queries should be used to query AEM's GraphQL APIs
const aemHeadlessClient = new AEMHeadless({
serviceURL: aemHost,
endpoint: '', // Avoid non-persisted queries
auth: accessToken // accessToken only set if the 2nd command line parameter is set
})
...
}
AEM persistente Abfragen werden über HTTP-GET ausgeführt und daher die AEM Headless-Client für Node.js wird verwendet, um die beibehaltenen GraphQL-Abfragen ausführen AEM und ruft den Inhalt des Abenteuers ab.
Die beibehaltene Abfrage wird durch Aufruf von aemHeadlessClient.runPersistedQuery(...)
und übergeben Sie den beibehaltenen GraphQL-Abfragenamen. Sobald GraphQL die Daten zurückgibt, übergeben Sie sie an die vereinfachte doSomethingWithDataFromAEM(..)
-Funktion, die die Ergebnisse druckt, aber normalerweise die Daten an ein anderes System sendet oder basierend auf den abgerufenen Daten eine Ausgabe generiert.
// index.js
async function run() {
...
try {
// Retrieve the data from AEM GraphQL APIs
data = await aemHeadlessClient.runPersistedQuery('wknd-shared/adventures-all')
// Do something with the data from AEM.
// A common use case is sending the data to another system.
await doSomethingWithDataFromAEM(data);
} catch (e) {
console.error(e.toJSON())
}
}