AEM API
AEM API では、製品化されたユースケースに固有の抽象概念と機能を提供します。
例:AEM の PageManager API と Page API は、web ページを表す AEM の cq:Page ノードの抽象概念を提供します。
これらのノードは Sling API を介してリソースとして使用でき、JCR API を介してノードとして使用できますが、AEM の API は一般的なユースケースの抽象概念を提供します。AEM API を使用することで、AEM 製品と AEM のカスタマイズおよび拡張機能の間で一貫した動作が保証されます。
com.adobe.* API と com.day.* API の比較
AEM API には、次の Java™ パッケージ(優先度順)で示すように、パッケージ内の優先順位があります。
com.adobe.cqcom.adobe.granitecom.day.cq
com.adobe.cq パッケージでは製品のユースケースをサポートしているのに対して、 com.adobe.granite では、(AEM Assets、Sites などの複数の製品を横断して使用される)ワークフローやタスクなど、複数の製品にまたがるプラットフォームのユースケースをサポートしています。
com.day.cq パッケージには「オリジナル」の API が含まれています。 これらの API は、アドビが Day CQ を買収する前や買収前後に存在していた中核概念および機能に対応しています。これらの API はサポートされており、 com.adobe.cq または com.adobe.granite パッケージに(新しい)代替手段が用意されていない場合を除いて、使用を避けてください。
Content Fragments や Experience Fragments などの新しい抽象概念は、下記の com.day.cq ではなく com.adobe.cq 空間に構築されています。
クエリ API
AEM では複数のクエリ言語をサポートしています。 主な言語は、JCR-SQL2、XPath、AEM Query Builder の 3 つです。
最も重要な関心事は、コードベース全体で一貫性のあるクエリ言語を維持して、理解するうえでの複雑さとコストを軽減することです。
すべてのクエリ言語は事実上同じパフォーマンスプロファイルを持っています。クエリの最終的な実行のために Apache Oak によってクエリ言語が JCR-SQL2 にトランスパイルされ、JCR-SQL2 への変換時間がクエリ時間そのものと比較して無視できるほど短いからです。
推奨される API は AEM Query Builder です。これは最高レベルの抽象概念であり、クエリを作成、実行およびクエリ結果を取得するための堅牢な API を提供しています。次のものが用意されています。
-
単純なパラメーター化されたクエリ構成(クエリパラメーターをマップとしてモデル化)
-
ネイティブ Java™ API および HTTP API
-
一般的なクエリ要件をサポートする AEM 述語
-
カスタムクエリ述語の開発を可能にする拡張可能な API
-
JCR-SQL2 と XPath は、Sling および JCR API を介して直接実行でき、それぞれSling リソースまたは JCR ノードとして結果を返します。
Sling API
Apache Sling は、AEM を支える RESTful web フレームワークです。 Sling は、HTTP リクエストルーティングを提供したり、JCR ノードをリソースとしてモデル化したり、セキュリティコンテキストを提供したりするなど、多くの機能を提供します。
Sling API には、拡張に対応するように構築されているというメリットが付加されています。つまり、多くの場合、Sling API を使用して構築されたアプリケーションの動作は、拡張性のより低い JCR API よりも容易かつ安全に拡張できます。
Sling API の一般的な用途
-
Sling Resources としてJCR ノードにアクセスし、ValueMap を介してそのデータにアクセスします。
-
ResourceResolver を介してセキュリティコンテキストを提供します。
-
ResourceResolver の create/move/copy/delete メソッドを介してリソースを作成および削除します。
-
ModifiableValueMap を介してプロパティを更新します。
-
リクエスト処理の構築ブロックを作成します。
-
非同期作業処理の構築ブロックを作成します。
JCR API
JCR(Java™ Content Repository)2.0 API は、JCR 実装(AEM の場合、Apache Jackrabbit Oak)の仕様の一部です。すべての JCR 実装は、これらの API に準拠し API を実装する必要があります。したがって、これは AEM のコンテンツを操作するための最も低レベルの API になります。
JCR 自体は階層型/ツリーベースの NoSQL データストアで、AEM ではこれをコンテンツリポジトリとして使用します。 JCR には、コンテンツの CRUD からコンテンツのクエリまで、サポートされている様々な API があります。 この堅牢な API にもかかわらず、AEM や Sling の高レベルの抽象概念より優先されることはまれです。
Apache Jackrabbit Oak API よりも JCR API を常に優先します。 JCR API が JCR リポジトリと やり取り するためのものであるのに対して、Oak API は JCR リポジトリを 実装 するためのものです。