AEM ヘッドレスデベロッパージャーニーのこのパートでは、GraphQL クエリを使用してコンテンツフラグメントのコンテンツにアクセスし、アプリにコンテンツをフィードする方法(ヘッドレス配信)について説明します。
AEM ヘッドレスジャーニーの前のドキュメント、コンテンツをモデル化する方法では、AEM でのコンテンツモデリングの基本を説明しました。これで、コンテンツ構造をモデル化し、AEM コンテンツフラグメントモデルおよびコンテンツフラグメントを使用してその構造を実現する方法を理解できました。具体的には以下を達成できました。
この記事は、これらの基本事項に基づいているので、AEM GraphQL API を使用して AEM の既存のヘッドレスコンテンツにアクセスする方法を理解できます。
(コンテンツフラグメントで)整然と構造化されたコンテンツがすべて用意されていて、それらが新しいアプリにフィードされるのを待つばかりだとします。問題は、どうやってコンテンツにアクセスするかです。
必要なのは、特定のコンテンツをターゲットにし、必要なものを選択してさらに処理するためにアプリに返す方法です。
Adobe Experience Manager (AEM)as a Cloud Service では、AEM GraphQL API を使用して、コンテンツフラグメントに選択的にアクセスし、必要なコンテンツのみを返すことができます。つまり、アプリケーションで使用する構造化コンテンツのヘッドレス配信を実現できることになります。
AEM GraphQL API はカスタマイズされた実装で、標準の GraphQL API 仕様に基づいています。
GraphQL は、次の機能を提供するオープンソース仕様です。
GraphQL は、厳密に型指定された API です。つまり、すべてのコンテンツが型別に明確に構造化および編成されている必要があります。その結果、アクセスする対象と方法を GraphQL が認識できるようになります。データフィールドは、コンテンツオブジェクトの構造を定義する GraphQL スキーマ内で定義されます。
次に、GraphQL クエリに応答するパスを GraphQL エンドポイントが提供します。
つまり、AEM と組み合わせて使用する際に必要なコンテンツだけを、アプリが正確に確実かつ効率的に選択できるということです。
詳しくは、GraphQL.org や GraphQL.com を参照してください。
AEM GraphQL API は、標準の GraphQL API 仕様に基づくカスタマイズバージョンで、コンテンツフラグメントに対して(複雑な)クエリを実行できるように特別に設定されたものです。
コンテンツは、コンテンツフラグメントモデルに従って構造化されているので、コンテンツフラグメントが使用されます。これは GraphQL の基本要件を満たしています。
AEM(およびコンテンツ)の GraphQL に実際にアクセスするには、エンドポイントを使用してアクセスパスを指定します。
AEM GraphQL API を使用して返されたコンテンツは、アプリケーションで使用できます。
クエリを直接入力およびテストできるように、標準の GraphQL インターフェイスの実装も AEM GraphQL で使用できます(これは AEM と共にインストールできます)。構文のハイライト表示、オートコンプリート、自動候補表示などの機能と共に、履歴およびオンラインドキュメントが用意されています。
AEM GraphQL API の実装は、GraphQL Java ライブラリに基づいています。
コンテンツフラグメントは、次の理由により、AEM スキーマおよびクエリ用の GraphQL の基盤となります。
コンテンツフラグメントモデルは、
フラグメント参照は、
コンテンツフラグメントモデルの定義時に使用できる特定のデータタイプです。
特定のコンテンツフラグメントモデルに依存する別のフラグメントを参照します。
構造化データを作成したあと取得できます。
コンテンツフラグメントモデルの設計と開発に役立てるため、コンテンツフラグメントエディターで JSON 出力をプレビューできます。
コンテンツに関するクエリを開始する前に、次の操作が必要です。
AEM GraphQL API をクエリで実際に使用するにあたって、次のような非常に基本的な 2 つのコンテンツフラグメントモデル構造を例として使用できます。
ご覧のように、「CEO」フィールドと「従業員」フィールドは、「人」フラグメントを参照しています。
フラグメントモデルが使用されるのは、次の場合です。
クエリは、GraphiQL インターフェイスで入力できます。クエリエディターには、次のいずれかの方法でアクセスできます。
http://localhost:4502/aem/graphiql.html
)わかりやすいクエリとしては、「会社」スキーマ内のすべてのエントリの名前を返す場合があります。以下では、すべての会社名のリストをリクエストします。
query {
companyList {
items {
name
}
}
}
もう少し複雑なクエリとしては、「Jobs」という名前を持たないすべての人を選択する場合があります。以下では、「Jobs」という名前を持たないすべての人を抜き出します。これは EQUALS_NOT 演算子で実現します(演算子は他にも多数あります)。
query {
personList(filter: {
name: {
_expressions: [
{
value: "Jobs"
_operator: EQUALS_NOT
}
]
}
}) {
items {
name
firstName
}
}
}
また、もっと複雑なクエリを作成することもできます。例えば、「Smith」という名前の従業員が 1 人以上いるすべての会社をクエリする場合です。以下のクエリでは、「Smith」という名前の人を抜き出し、ネストされたフラグメントから取得した情報を返します。
query {
companyList(filter: {
employees: {
_match: {
name: {
_expressions: [
{
value: "Smith"
}
]
}
}
}
}) {
items {
name
ceo {
name
firstName
}
employees {
name
firstName
}
}
}
}
AEM GraphQL API の使用と必要な要素の設定について詳しくは、次のドキュメントを参照してください。
これで、AEM GraphQL API を使用してヘッドレスコンテンツにアクセスしクエリを実行する方法について説明します。次は、REST API を使用してコンテンツフラグメントのコンテンツにアクセスしコンテンツを更新する方法について説明します。