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.com
So 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-all
gibt 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())
}
}