Adobe Experience ManagerでのGraphQL応答構造とマークダウン出力の違い
AEM 6.5.23以降または6.5 LTSにアップグレードすると、AEM 6.5.20などの以前のバージョンと比較して、コンテンツフラグメントのGraphQL応答の構造とマークダウン出力フォーマットに違いが見られます。 これらの変更は、ユニオンタイプクエリでの空のオブジェクトの処理方法と、マークダウンフィールドでの空白のレンダリング方法に影響します。 この問題を修正するには、応答で空のオブジェクトを処理し、マークダウン処理を調整して、一貫した永続クエリエンコーディングに従います。
説明 description
環境
- 商品:Adobe Experience Manager(AEM)Managed Services、AEM Sites
- バージョン:6.5.23+/ 6.5 LTS (SP1/SP2を含む)、以前のバージョン参照先:6.5.20
問題と症状
- GraphQLの応答では、マルチフィールドフラグメント参照に、クエリにリストされている許可されたモデルと一致しないコンテンツフラグメントが含まれている場合、AEM 6.5.23以降および6.5 LTSは、それらのエントリに対して空のJSON オブジェクトを返しますが、以前のバージョンでは完全に省略されています。
- リッチテキストフィールドからのMarkdown出力では、段落やブロック間の追加スペースや空白行など、空白の処理に違いが見られます。
- AEM 6.5.23以降および6.5 LTSの永続クエリエンドポイントは、エンコードされていない特殊文字に対してより寛容ですが、一貫した動作にはURL エンコーディングが必要です。
解決策 resolution
この問題を修正するには、次の手順に従います。
-
結合タイプクエリによって返される空のJSON オブジェクトの処理:
- GraphQL レスポンスを処理する際に、クライアントサイドの空のオブジェクト(プロパティのないオブジェクト)をフィルタリングします。
- または、永続クエリを更新して、可能なすべての参照モデルのフラグメントを含め、各タイプに関連するデータが返されるようにします。
-
Markdownの空白と書式の違い:
- 正確な空白または書式設定が重要な場合は、Markdownの代わりにフィールドのHTMLまたはJSON表現を使用することを検討してください。
- 必要に応じて、レンダリング前に繰り返しスペースまたは空白行を折りたたんで、後処理中に空白を正規化します。
-
永続的なクエリエンコーディング:
- 文書化されたパターンに従って、セミコロン、スペース、コロンなどの特殊文字を、永続的なクエリサフィックスと変数に常にURL エンコードします。
- この動作は将来のアップデートで保証されないため、新しいバージョンで導入されたエンコードされていない文字に対する許容値の増加に依存しないでください。
-
次のことを確認します。
- クライアントアプリケーションは、必要に応じて、GraphQLの応答から空のオブジェクトを正しく除外します。
- Markdown出力に正規化ステップを適用すると、レンダリングされたコンテンツが期待どおりに表示されます。
- 永続的なクエリは、エンコーディング要件に従うことで、環境をまたいで一貫して機能します。
メモ
- 記載されている動作は、AEM 6.5.23以降 / 6.5 LTSで導入された意図的な変更と、更新されたGraphQL エンジンにより期待されます。
- セマンティックの一貫性(正しい構造とコンテンツ)は維持されますが、バージョン間でバイト単位で同じMarkdown出力が保証されるわけではありません。
- コンテンツの欠落や構造の誤りなど、セマンティックな問題が発生した場合は、予測される行動の変化ではなく欠陥を示す可能性があるため、さらに調査が必要になる場合があります。
関連トピックス
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f