Node.js-Server-zu-Server-App
[AEM Headless as a Cloud Service]{class="badge informative"}
Beispielanwendungen eignen sich hervorragend, um die Headless-Funktionen von Adobe Experience Manager (AEM) zu erkunden. Diese Server-zu-Server-Anwendung zeigt, wie Inhalte mithilfe von AEM GraphQL-APIs unter Verwendung persistierter Abfragen abgerufen und auf einem Terminal gedruckt werden können.
Sie finden den Quell-Code auf GitHub.
Voraussetzungen prerequisites
Folgende Tools sollten lokal installiert werden:
AEM-Anforderungen
Die Node.js-Anwendung funktioniert mit den folgenden AEM-Bereitstellungsoptionen. Für alle Bereitstellungen muss die WKND-Site v3.0.0+ installiert werden.
- AEM as a Cloud Service
- Optional Service-Anmeldeinformationen bei Autorisierung von Anfragen (z. B. Verbindung mit dem AEM-Autoren-Service)
Diese Node.js-Anwendung kann basierend auf den Befehlszeilenparametern eine Verbindung zu AEM Author oder AEM Publish herstellen.
Informationen zur Verwendung
-
Klonen des Repositorys
adobe/aem-guides-wknd-graphql:code language-shell $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git -
Öffnen Sie ein Terminal und führen Sie die folgenden Befehle aus:
code language-shell $ cd aem-guides-wknd-graphql/server-to-server-app $ npm install -
Die App kann mit dem folgenden Befehl ausgeführt werden:
code language-none $ node index.js <AEM_HOST> <OPTIONAL_SERVICE_CONFIG_FILE_PATH>So führen Sie beispielsweise die App für AEM Publish ohne Autorisierung aus:
code language-shell $ node index.js https://publish-p123-e789.adobeaemcloud.comSo führen Sie die App für AEM Author mit Autorisierung aus:
code language-shell $ node index.js https://author-p123-e456.adobeaemcloud.com ./service-config.json -
Eine JSON-Liste mit Adventures von der WKND-Referenz-Website sollte auf dem Terminal gedruckt werden.
Der Code
Nachstehend finden Sie eine Zusammenfassung dazu, wie die Node.js-Server-zu-Server-Anwendung erstellt wird, wie eine Verbindung mit AEM Headless hergestellt wird, um Inhalte mithilfe persistierter GraphQL-Abfragen abzurufen, und wie diese Daten dargestellt werden. Den vollständigen Code finden Sie auf GitHub.
Der gängige Anwendungsfall für AEM Headless-Server-zu-Server-Apps besteht darin, Inhaltsfragmentdaten von AEM mit anderen Systemen zu synchronisieren. Diese Anwendung ist jedoch absichtlich einfach gehalten und druckt die JSON-Ergebnisse aus der persistenten Abfrage.
Persistierte Abfragen
Gemäß den Best Practices für AEM Headless verwendet die Anwendung AEM GraphQL-persistierte Abfragen, um Adventure-Daten abzufragen. Die Anwendung verwendet zwei persistierte Abfragen:
- Die persistierte Abfrage
wknd/adventures-allgibt alle Adventures in AEM mit einer gekürzten Reihe von Eigenschaften zurück. Diese persistierte Abfrage bestimmt die Erlebnisliste der ersten Ansicht.
# Retrieves a list of all Adventures
#
# Optional query variables:
# - { "offset": 10 }
# - { "limit": 5 }
# - {
# "imageFormat": "JPG",
# "imageWidth": 1600,
# "imageQuality": 90
# }
query ($offset: Int, $limit: Int, $sort: String, $imageFormat: AssetTransformFormat=JPG, $imageWidth: Int=1200, $imageQuality: Int=80) {
adventureList(
offset: $offset
limit: $limit
sort: $sort
_assetTransform: {
format: $imageFormat
width: $imageWidth
quality: $imageQuality
preferWebp: true
}) {
items {
_path
slug
title
activity
price
tripLength
primaryImage {
... on ImageRef {
_path
_dynamicUrl
}
}
}
}
}
Erstellen eines AEM Headless-Clients
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
})
...
}
Durchführen einer GraphQL-persistierten Abfrage
Persistierte AEM-Abfragen werden über HTTP-GET ausgeführt. Daher wird der AEM Headless-Client für Node.js verwendet, um persistierte GraphQL-Abfragen für AEM auszuführen und so Adventure-inhalte abzurufen.
Die persistierte Abfrage wird durch Aufruf von aemHeadlessClient.runPersistedQuery(...) und Übergabe des Namens der persistenten GraphQL-Abfrage aufgerufen. Sobald GraphQL die Daten zurückgibt, übergeben Sie diese an die vereinfachte Funktion doSomethingWithDataFromAEM(..), die die Ergebnisse druckt. Normalerweise würden die Daten jedoch an ein anderes System gesendet oder basierend auf den abgerufenen Daten würde eine Ausgabe generiert werden.
// 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())
}
}