1. Experience Edge for XM API

Experience Edgeスキーマ

日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Sitecore Experience EdgeはヘッドレスSitecore開発の一般的なフロントエンドユースケースに対応するために、読み取り専用のGraphQLスキーマを持っています。Sitecoreの製品に関する限定的な情報しか公開していません。例えば、標準フィールドは存在しません。

以下のクエリがエントリーポイントとして利用可能です:

  • item - パスやIDでアイテムを照会できる。

  • layout - 通常は、そのレイアウトサービスJSONにアクセスする目的で、サイトやルートパスでアイテムを照会できます(rendered)。

  • search - フィールド値や共通プロパティでアイテムを見つけるためのブールフィールド検索クエリの構築が可能です。

  • site - サイト情報の検索をコンテンツサイトに行使できます。

詳細については、例クエリ をご参照し、プレビューエンドポイントIDEのGraphQLテストUIのDocsタブをご利用ください。

テンプレート投影

Experience Edgeスキーマで利用可能なタイプは、公開されたSitecoreインスタンスのテンプレート定義を反映しています。特定のタイプからフィールドを選択するインラインフラグメントを使用することで、強力型テンプレートフィールドを有効にすることができます。

Sitecoreのバックエンドでは、テンプレートやフィールドに同じ名前を付けることができます。しかし、GraphQLでは型やフィールドの名前は一意でなければなりません。命名衝突が発生すると、最も新しい作成日のアイテムまたはフィールドアイテムが _{guid} 名前に付加されます。作成日が使われるのは、順序が安定していなければならず、グラフ型の名前は参照後に決して変更されてはならないからです。

注記

GraphQL型は、以下のルートでテンプレートに対して生成されます:

  • <foundation>/sitecore/templates/Foundation</foundation>

  • <feature>/sitecore/templates/Feature</feature>

  • <project>/sitecore/templates/Project</project>

  • <userdefined>/sitecore/templates/User Defined</userdefined>

ページ分け

検索クエリのようなページ分け付きクエリやExperience Edgeスキーマ内のフィールドは、カーソルベースのシステムを使って結果ページを要求します。

ページ付きクエリの場合:

  • クエリの引数にはfirst (返す結果数)とafter (最初のカーソル)が含まれます。 firstのデフォルト値は10です。

  • クエリ結果には、hasNext(結果が複数あるかどうか)とendCursor(次のページを得るために使われる)を含むpageInfoが含まれます。

  • クエリ結果にはtotal (利用可能な結果の総数を示す)も含まれます。

    注記

    最初の引数は、Previewスキーマの基盤となるGraphQLライブラリで使われる複雑度計算を問い合わせる特別な意味を持ちます。特に、Itemグラフ型のネストされたchildrenフィールドを使用すると、Query is too complex to executeなどのエラーが発生することがあります。以下のセクションでは、クエリ複雑さの扱いに関する推奨事項が含まれています。

クエリ複雑性

クエリの複雑度とは、実行にどれだけリソースを消費するかに基づいてGraphQLクエリに割り当てられる数値スコアを指します。このスコアは、過度に複雑なクエリがパフォーマンスを低下させたり、サービス拒否のリスクを生むのを防ぐのに役立ちます。Experience Edgeクエリには複雑さの上限があります。クエリを実行環境で使用する前に、複雑さの要件を満たしているか確認するためにテストすることをお勧めします。もしクエリが複雑すぎる場合は、以下の方法を試してみてください。

注記

Experience Edge(配信)クエリのコストは設定できません。

  • 複数の小さなクエリに分けて考えましょう。例えば、1つのクエリでデータセットを取得し、その後のクエリをそのデータセットに適用します。複数のオブジェクトに対する大規模なクエリはクエリの複雑さを大幅に増加させます。

  • クエリから不要なフィールドを削除してください。

データ構造の本質的な違いにより、複雑度はデリバリーエンドポイントとプレビューエンドポイント(コンテンツ管理のバックエンド)で異なる計算方法で行われます。複雑さ計算ができるだけ近いようにデフォルト設定を導入しました。しかし、それらを完全に一致させることは不可能です。

プレビューエンドポイントのいくつかの設定オプションは、sitecore.configファイルのcomplexityConfigurationオブジェクト内で利用可能です。

<!-- 
  COMPLEXITY CONFIGURATION
  It is possible to conduct denial of service attacks by constructing extremely expensive to run GraphQL queries.
  The complexity configuration defeats that by limiting how complex of a query will be run.
  
  maxDepth: the maximum nesting depth in a query. maxDepth values lower than 15 will prevent /ui from running.  
  fieldImpact: the average impact of adding a list field to a query (e.g. how many average items it would return).
  maxComplexity: the maximum field impact a query can have before it's rejected. With a fieldImpact at 2, values of maxComplexity less than 250 will prevent /ui from running.
-->
<complexityConfiguration type="GraphQL.Validation.Complexity.ComplexityConfiguration, GraphQL" patch:source="Mvp.Environment.GraphQL.config">
  <maxDepth>15</maxDepth>
  <maxComplexity>10000</maxComplexity>
  <fieldImpact>2</fieldImpact>
</complexityConfiguration>

あるいは、非本番環境では、プレビューエンドポイントの複雑さ制限を到達できない大きな数に引き上げ、本番環境でのExperience Edge(デリバリー)クエリのコストを見積もるためにクエリを実行することもできます。

コンテンツ検索用の利用可能なフィールド

Experience Edgeでは、以下の表に記載された特殊フィールドに対してGraphQL searchクエリを使用できます。テンプレートをクエリする際は、ユーザー定義のフィールドと以下の特殊フィールドのみを照会できます。例えば、サンプルアイテムテンプレートのユーザー定義titleフィールドをクエリすることはできますが、_Sortorderはできません。

フィールド

概要

_templates

すべてのテンプレートGUIDを含み、基本テンプレートも含まれます。階層内でテンプレートを使用しているすべてのアイテムを見つけるために使えます。

_path

親項目を含み、GUIDによってアイテムの子孫を取得するために使用できます。例えば、contains節と /homeパスのIDを用いると、結果には /homeとその子(例: /home/about_us)が含まれます。

_parent

そのアイテムの直系親のIDです。

_name

アイテム名。

_language

アイテムの言語。

_hasLayout

アイテムにプレゼンテーションの詳細やレイアウトデータがあるかどうかを示します。

_latestversion

アイテムの最新バージョンのみを表示するかどうかを判定するブール値です。

注記

_latestversionフィールドはプレビュースキーマとデリバリースキーマで異なる処理が行われます。Delivery APIへのクエリで_latestversiontrueに設定すると、最新の公開可能なバージョンが返されます。_latestversionの値はデリバリー APIへの通話時にのみtrueに設定されます。falseに設定されている場合はエラーを返します。プレビュー APIへのクエリで_latestversiontrueに設定すると、最新の利用可能なバージョンが返されます。falseに設定されている場合、すべてのバージョンのアイテムを返します。

Search演算子

searchクエリは以下の演算子をサポートしています:

  • EQ (Equals) - 値が完全に一致するユーザー定義フィールドのみをマッチさせる。

    • フィールド全体が検索値と正確に一致しなければなりません。

    • 部分的な一致は返答されません。

    例えば、EQ演算子でipsumを探すには、フィールド全体の値の正確な一致が必要です。これは、を含む体にはlorem ipsum dolor sit ametを含みませんが、値がちょうどipsumである体には一致します。

    正確な全フィールドマッチングが必要な場合はこのオペレーターを使います。

  • CONTAINS - テキスト内のどこにでも検索値を含むフィールドをマッチングします。

    • 正確な部分文字列マッチを実行します。

    • 配信エンドポイントでは、その値をそのままマッチングします(トークン化やランキングはなし)。

    例えば、CONTAINS演算子でipsumを検索すると、テキスト内の任意の項目に値が現れる任意のフィールドと一致します。これは、lorem ipsum dolor sit ametを含む体と一致することを意味します。なぜなら、ipsumが場の値の一部として存在するためです。

    このオペレーターは部分的なテキストマッチングや、フィールド内の単語やフレーズに基づくフィルタリングに使えます。

注記

GraphQLの検索フィールドは、全文検索やサイト検索機能の実装ではなく、コンテンツのフィルタリング用に設計されています。より高度な検索機能を求めるなら、専用の検索サービスを利用することを検討してください。

検索クエリの例

これはユーザー定義フィールド内のCONTAINS演算子を使ってアイテムを検索する例です:

query Search {
  search(
    where: {
      name: "title",
      value: "Sitecore",
      operator: CONTAINS
    }
  ) {
    results {
      id
      name
    }
  }
}

こちらはユーザー定義のフィールドで正確な一致を使ったアイテム検索の例です:

query Search {
  search(
    where: {
      name: "_parent"
      value: "110D559FDEA542EA9C1C8A5DF7E70EF9"
      operator: EQ
    }
  ) {
    results {
      id
      name
    }
  }
}

以下は複数の節を組み合わせる例です:

query Search {
  search(
    where: {
      AND: [
        {
          name: "_parent"
          value: "110D559FDEA542EA9C1C8A5DF7E70EF9"
          operator: EQ
        },
        {
          name: "title"
          value: "another"
          operator: CONTAINS
        }
      ]
    }
  ) {
    results {
      id
      name
    }
  }
}

メディアとの仕事

Edgeで画像に変更を直接適用できます。画像操作には以下のオプションがサポートされています:

クエリパラメータ

概要

w

画像の幅。

h

画像の高さ。

mw

画像の最大幅。

mh

画像の最大高さ。

f

画像ファイル形式。以下の数値がサポートされています:

  • avif - 可能であればavif形式で画像を生成する。できなければwebpにフォールバック。

  • webp - Google webp形式で画像を生成する。

  • jpeg - データを複数回圧縮し、徐々に詳細が増すインターレースプログレッシブJPEG形式の画像を生成する。

  • baseline-jpeg - 基準の連続JPEG形式で画像を生成する。ターゲットデバイスがプログレッシブJPEGや他の最新のファイル形式をサポートしていない場合に使います。

  • json - 画像を生成する代わりに、画像に関する情報をJSON形式で出力します。 JSONオブジェクトには、画像サイズ(リサイズ前後)、元の画像のタイプ、ファイルサイズなどのデータMIME含まれています。

この記事を改善するための提案がある場合は、 お知らせください!