Die GraphQL-API

GraphQL ist:

  • …eine Abfragesprache für APIs und eine Laufzeitumgebung zur Erfüllung dieser Abfragen mit Ihren vorhandenen Daten. GraphQL bietet eine vollständige und verständliche Beschreibung der Daten in Ihrer API, gibt Kunden die Möglichkeit, genau das abzufragen, was sie benötigen, und nicht mehr, macht es einfacher, APIs im Laufe der Zeit weiterzuentwickeln, und ermöglicht leistungsstarke Entwicklerwerkzeuge.

    Weitere Informationen finden Sie unter GraphQL.org

  • …eine offene Spezifikation für eine flexible API-Schicht. Legen Sie GraphQL über Ihre bestehenden Backends, um Produkte schneller als je zuvor zu erstellen …

    Weitere Informationen finden Sie unter GraphQL entdecken.

  • „… eine Datenabfragesprache und -spezifikation, die 2012 intern von Facebook entwickelt wurde, bevor sie 2015 öffentlich als Open Source zur Verfügung gestellt wurde. Sie bietet eine Alternative zu REST-basierten Architekturen mit dem Ziel, die Produktivität von Entwicklern zu erhöhen und die Menge der übertragenen Daten zu minimieren. GraphQL wird von Hunderten von Unternehmen aller Größenordnungen in der Produktion eingesetzt …“

    Siehe GraphQL Foundation.

Weitere Informationen zur GraphQL-API finden Sie in den folgenden Abschnitten (neben vielen anderen Ressourcen):

Die Implementierung von GraphQL für AEM basiert auf der standardmäßigen GraphQL-Java-Bibliothek. Siehe:

GraphQL-Terminologie

GraphQL verwendet Folgendes:

  • Abfragen

  • Schemata und Typen:

    • Schemata werden von AEM basierend auf den Inhaltsfragmentmodellen generiert.
    • GraphQL stellt mithilfe Ihrer Schemata die Typen und Vorgänge dar, die für die GraphQL-Implementierung für AEM zulässig sind.
  • Felder

  • GraphQL-Endpunkt

    • Der Pfad in AEM, der auf GraphQL-Abfragen antwortet und Zugriff auf die GraphQL-Schemata bietet.

    • Weitere Informationen finden Sie unter Aktivieren des GraphQL-Endpunkts.

In der (GraphQL.org) Einführung in GraphQL finden Sie ausführliche Informationen, einschließlich der Best Practices.

GraphQL-Abfragetypen

Mit GraphQL können Sie Abfragen für Folgendes durchführen:

AEM bietet Funktionen zum Konvertieren von Abfragen (beide Typen) in persistente Abfragen, die vom Dispatcher und CDN zwischengespeichert werden können.

Best Practices für GraphQL-Abfragen (Dispatcher und CDN)

Die persistenten Abfragen sind die empfohlene Methode für die Nutzung bei Veröffentlichungsinstanzen, da:

  • sie zwischengespeichert werden
  • sie zentral von AEM as a Cloud Service verwaltet werden
NOTE
Normalerweise gibt es keinen Dispatcher/kein CDN auf der Autoreninstanz, sodass die Verwendung persistenter Abfragen dort keinen Vorteil bringt, außer dass sie getestet werden können.

GraphQL-Abfragen über POST werden nicht empfohlen, da sie nicht zwischengespeichert werden. Daher ist der Dispatcher auf einer Standardinstanz so konfiguriert, dass er solche Abfragen blockiert.

GraphQL unterstützt zwar auch GET-Anfragen, diese können jedoch Einschränkungen unterliegen (z. B. die Länge der URL), die durch die Verwendung persistierter Abfragen vermieden werden können.

Weitere Informationen finden Sie unter Aktivieren der Caching-Funktion für persistierte Abfragen.

NOTE
Um direkte und/oder POST-Abfragen im Dispatcher zuzulassen, können Sie Ihren Systemadministrator bzw. Ihre Systemadministratorin bitten, Folgendes zu tun:
NOTE
Die Möglichkeit, direkte Abfragen durchzuführen, könnte irgendwann in der Zukunft entfernt werden.

GraphiQL-IDE

Zusätzlich können Sie GraphQL-Abfragen mit der GraphiQL-IDE testen und debuggen.

Anwendungsfälle für Autoren und Autorinnen, Vorschau und Veröffentlichung

Die Anwendungsfälle können vom Typ der AEM as a Cloud Service-Umgebung abhängig sein:

  • Veröffentlichungsumgebung; wird verwendet, um:

    • Daten für das JS-Programm (Standardanwendungsfall) abzufragen
  • Vorschauumgebung; wird verwendet, um:

    • eine Vorschau der Abfragen vor der Bereitstellung in der Publishing-Umgebung anzuzeigen
      • Daten für das JS-Programm (Standardanwendungsfall) abzufragen
  • Autorenumgebung; wird verwendet, um:

    • Daten für „Content-Management-Zwecke“ abzufragen:

      • GraphQL in AEM as a Cloud Service ist derzeit eine schreibgeschützte API.
      • Die REST-API kann für CR(u)D-Vorgänge verwendet werden.

Berechtigungen

Die Berechtigungen sind diejenigen, die für den Zugriff auf Assets erforderlich sind.

GraphQL-Abfragen werden mit der Berechtigung der AEM-Benutzenden der zugrunde liegenden Anfrage ausgeführt. Wenn die Benutzenden keinen Lesezugriff auf einige (als Assets gespeicherte) Fragmente haben, werden diese nicht Teil der Ergebnismenge.

Außerdem benötigen die Benutzenden Zugriff auf einen GraphQL-Endpunkt, um GraphQL-Abfragen ausführen zu können.

Schema-Generierung

GraphQL ist eine stark typisierte API, was bedeutet, dass die Daten klar strukturiert und nach Typ geordnet sein müssen.

Die GraphQL-Spezifikation enthält eine Reihe von Richtlinien zum Erstellen einer robusten API zum Abfragen von Daten in einer bestimmten Instanz. Dazu muss ein Client das Schema abrufen, das alle für eine Abfrage erforderlichen Typen enthält.

Bei Inhaltsfragmenten basieren die GraphQL-Schemata (Struktur und Typen) auf aktivierten Inhaltsfragmentmodellen und deren Datentypen.

CAUTION
Alle GraphQL-Schemata (abgeleitet von Inhaltsfragmentmodellen, die aktiviert wurden) können über den GraphQL-Endpunkt gelesen werden.
Das bedeutet, dass Sie sicherstellen müssen, dass keine vertraulichen Daten verfügbar sind, da sie auf diese Weise an die Öffentlichkeit gelangen könnten. Dazu gehören beispielsweise Informationen, die als Feldnamen in der Modelldefinition vorhanden sein könnten.

Wenn Benutzende beispielsweise ein Inhaltsfragmentmodell mit dem Namen Article erstellen, generiert AEM den GraphQL-Typ ArticleModel. Die Felder dieses Typs entsprechen den im Modell definierten Feldern und Datentypen. Außerdem werden einige Einstiegspunkte für Abfragen erstellt, die für diesen Typ gelten, z. B. articleByPath oder articleList.

  1. Ein Inhaltsfragmentmodell:

    Inhaltsfragmentmodell zur Verwendung mit GraphQL

  2. Das entsprechende GraphQL-Schema (Ausgabe aus der automatischen GraphiQL-Dokumentation):
    GraphQL-Schema basierend auf Inhaltsfragmentmodell

    Dies zeigt, dass der generierte Typ ArticleModel mehrere Felder enthält.

    • Drei davon wurden vom Benutzer kontrolliert: author, main und referencearticle.

    • Die anderen Felder wurden automatisch von AEM hinzugefügt und helfen, Informationen zu einem bestimmten Inhaltsfragment bereitzustellen. In diesem Beispiel (die Hilfsfelder) _path, _metadata und _variations.

  3. Nachdem ein Benutzer ein Inhaltsfragment basierend auf dem Modell „Article“ erstellt hat, kann es über GraphQL abgefragt werden. Beispiele finden Sie in den Beispielabfragen (basierend auf einer Beispielstruktur für Inhaltsfragmente zur Verwendung mit GraphQL).

In GraphQL für AEM ist das Schema flexibel. Dies bedeutet, dass es jedes Mal automatisch generiert wird, wenn ein Inhaltsfragmentmodell erstellt, aktualisiert oder gelöscht wird. Die Datenschema-Caches werden auch aktualisiert, wenn Sie ein Inhaltsfragmentmodell aktualisieren.

Die Datenschema-Caches werden auch aktualisiert, wenn Sie ein Inhaltsfragmentmodell aktualisieren.

Der Sites GraphQL-Service überwacht (im Hintergrund) alle Änderungen, die an einem Inhaltsfragmentmodell vorgenommen werden. Wenn Aktualisierungen erkannt werden, wird nur dieser Teil des Schemas neu generiert. Diese Optimierung spart Zeit und sorgt für Stabilität.

Wenn Sie zum Beispiel:

  1. ein Paket installieren, das Content-Fragment-Model-1 und Content-Fragment-Model-2 enthält:

    1. GraphQL-Typen werden für Model-1 und Model-2 generiert.
  2. Ändern Sie anschließend Content-Fragment-Model-2:

    1. Nur der GraphQL-Typ Model-2 wird aktualisiert.

    2. Model-1 bleibt unverändert.

NOTE
Dies ist wichtig, wenn Sie Massenaktualisierungen von Inhaltsfragmentmodellen über die REST-API oder auf andere Weise durchführen möchten.

Das Schema wird über denselben Endpunkt wie die GraphQL-Abfragen bereitgestellt, wobei der Client die Tatsache behandelt, dass das Schema mit der GQLschema-Erweiterung aufgerufen wird. Wenn Sie beispielsweise eine einfache GET-Anfrage an /content/cq:graphql/global/endpoint.GQLschema ausführen, wird das Schema mit dem Inhaltstyp ausgegeben: text/x-graphql-schema;charset=iso-8859-1.

Schemagenerierung – Nicht veröffentlichte Modelle

Wenn Inhaltsfragmente verschachtelt sind, kann es vorkommen, dass ein übergeordnetes Inhaltsfragmentmodell veröffentlicht wird, ein referenziertes Modell jedoch nicht.

NOTE
Die AEM-Benutzeroberfläche verhindert dies, aber wenn die Veröffentlichung programmgesteuert oder mit Inhaltspaketen erfolgt, kann es vorkommen.

In diesem Fall generiert AEM ein unvollständiges Schema für das übergeordnete Inhaltsfragmentmodell. Das bedeutet, dass die Fragmentreferenz, die vom nicht veröffentlichten Modell abhängt, aus dem Schema entfernt wird.

Felder

Innerhalb des Schemas gibt es einzelne Felder, die zwei grundlegenden Kategorien angehören:

  • Von Ihnen generierte Felder.

    Eine Auswahl von Datentypen wird verwendet, um Felder basierend auf der Konfiguration Ihres Inhaltsfragmentmodells zu erstellen. Die Feldnamen werden dem Feld Eigenschaftsname auf der Registerkarte Datentyp entnommen.

    • Daneben gibt es auch die Einstellung Rendern als, da Benutzende bestimmte Datentypen konfigurieren können. Beispielsweise kann ein einzeiliges Textfeld so konfiguriert werden, dass es mehrere einzeilige Texte enthält, indem multifield aus der Dropdown-Liste ausgewählt wird.
  • GraphQL für AEM generiert auch eine Reihe von Hilfsfeldern.