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.

Node.js-Server-zu-Server-App mit AEM Headless

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.

Diese Node.js-Anwendung kann basierend auf den Befehlszeilenparametern eine Verbindung zu AEM Author oder AEM Publish herstellen.

Informationen zur Verwendung

  1. Klonen des Repositorys adobe/aem-guides-wknd-graphql:

    code language-shell
    $ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
    
  2. Ö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
    
  3. 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
    
  4. 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())
    }
}
recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4