Unterschiede in der GraphQL-Antwortstruktur und der Markdown-Ausgabe in Adobe Experience Manager
Nach dem Upgrade auf AEM 6.5.23+ oder 6.5 LTS gibt es Unterschiede in der Struktur der GraphQL-Antworten für Inhaltsfragmente und in der Markdown-Ausgabeformatierung im Vergleich zu früheren Versionen, wie AEM 6.5.20. Diese Änderungen wirken sich darauf aus, wie leere Objekte in Abfragen vom Typ Vereinigung verarbeitet werden und wie Leerzeichen in Markdown-Feldern gerendert werden. Um dieses Problem zu beheben, behandeln Sie leere Objekte in Antworten, passen Sie die Markdown-Verarbeitung an und befolgen Sie die konsistente Kodierung der persistierten Abfrage.
Beschreibung description
Umgebung
- Produkt: Adobe Experience Manager (AEM) Managed Services, AEM Sites
- Version: 6.5.23+/ 6.5 LTS (einschließlich SP1/SP2), frühere Version referenziert: 6.5.20
Problem und Symptome
- Wenn in GraphQL-Antworten ein Multifield-Fragmentverweis Inhaltsfragmente enthält, die mit keinem in der Abfrage aufgelisteten zulässigen Modell übereinstimmen, geben AEM 6.5.23+ und 6.5 LTS leere JSON-Objekte für diese Einträge zurück, während sie in früheren Versionen vollständig weggelassen werden.
- Die Markdown-Ausgabe von Rich-Text-Feldern zeigt Unterschiede bei der Behandlung von Leerzeichen, z. B. zusätzliche Leerzeichen oder leere Zeilen zwischen Absätzen oder Blöcken.
- Der Endpunkt der persistenten Abfrage in AEM 6.5.23+ und 6.5 LTS ist toleranter gegenüber nicht kodierten Sonderzeichen, erfordert jedoch für konsistentes Verhalten weiterhin URL-Kodierung.
Lösung resolution
Gehen Sie wie folgt vor, um dieses Problem zu beheben:
-
Umgang mit leeren JSON-Objekten, die von Abfragen vom Vereinigungstyp zurückgegeben werden:
- Client-seitiges Herausfiltern leerer Objekte (Objekte ohne Eigenschaften) bei der Verarbeitung der GraphQL-Antwort.
- Aktualisieren Sie alternativ die persistierte Abfrage, um Fragmente für alle möglichen referenzierten Modelle einzuschließen, um sicherzustellen, dass relevante Daten für jeden Typ zurückgegeben werden.
-
Unterschiede bei Markdown-Leerzeichen und Formatierung:
- Wenn genaue Leerzeichen oder Formatierungen wichtig sind, sollten Sie die HTML- oder JSON-Darstellung des Felds anstelle von Markdown verwenden.
- Optional können Sie Leerzeichen während der Nachbearbeitung normalisieren, indem Sie wiederholte Leerzeichen oder leere Zeilen vor dem Rendern ausblenden.
-
Kodierung der persistierten Abfrage:
- Codieren Sie Sonderzeichen wie Semikolons, Leerzeichen und Doppelpunkte immer in persistenten Suffixen und Variablen gemäß dokumentierten Mustern.
- Verlassen Sie sich nicht auf eine erhöhte Toleranz für nicht kodierte Zeichen, die in neueren Versionen eingeführt wurden, da dieses Verhalten bei zukünftigen Aktualisierungen nicht garantiert ist.
-
Überprüfen Sie, ob:
- Die Client-Anwendung filtert leere Objekte bei Bedarf korrekt aus GraphQL-Antworten heraus.
- Gerenderter Inhalt wird nach Anwenden von Normalisierungsschritten auf die Markdown-Ausgabe wie erwartet angezeigt.
- Persistierte Abfragen funktionieren konsistent in allen Umgebungen, indem die Kodierungsanforderungen eingehalten werden.
Hinweise
- Die beschriebenen Verhaltensweisen werden aufgrund von absichtlichen Änderungen erwartet, die in AEM 6.5.23+ / 6.5 LTS und der aktualisierten GraphQL-Engine eingeführt wurden.
- Die semantische Konsistenz (korrekte Struktur und Inhalte) wird beibehalten. Eine byte-für-byte-identische Markdown-Ausgabe über Versionen hinweg ist jedoch nicht garantiert.
- Werden semantische Probleme, wie fehlende Inhalte oder falsche Struktur, beobachtet, sind möglicherweise weitere Untersuchungen erforderlich, da diese eher auf Mängel als auf erwartete Verhaltensänderungen hinweisen könnten.