1. GraphQL API

プレビューAPIとデリバリーGraphQL APIの違い

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

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

プレビュー GraphQL APIとデリバリー GraphQL APIは同じ認証方法を使用し、同じクエリおよびレスポンス形状を共有していますが、両API間にはいくつかの違いがあります。このトピックでは、2つのAPIの違いについて説明します。

クエリ複雑性

クエリの複雑さはAPIごとに異なる計算方法で行われます。実際には、プレビュー GraphQL APIエンドポイントで実行されるクエリはDeliveryエンドポイントでも実行されるべきですが、クエリが大きいか深く入れ子状の場合は 両方のエンドポイントをテスト する必要があります。

スキーマとフィールドの違い

未公開コンテンツと公開コンテンツで利用可能なフィールドに違いがあるため、Experience Edgeで公開されているコンテンツを検索する際は、Experience Edgeスキーマドキュメントで説明されているフィールド を使用することを推奨します。さらに、追加したフィールドについては、標準テンプレートのフィールドを公開可能にしてください

以下のスキーマの違いに注目してください:

  • 現場の利用可能性は異なる場合があります:
    • Preview - 公開されたコンテンツに存在しないフィールドを公開できる。
    • Delivery - Experience Edgeスキーマに記載されたフィールドと、明示的に公開した標準テンプレートフィールドのみを公開します。
  • _latestversionの検索フィールドは異なる挙動を示します:
    • Preview - フィールドは最新の利用可能なバージョンを返し、 false がすべてのバージョンを返すことを可能にします。
    • Delivery - フィールドは最新の公開可能なバージョンを返し、 trueのみを受け入れます。
  • Searchオペレーターの挙動 はプレビューエンドポイントとデリバリーエンドポイント間で異なります。

スキーマ拡張

プレビュー GraphQL APIスキーマはデリバリー GraphQL APIのスキーマを反映しています。プレビュー GraphQL APIスキーマはExperience Edgeとの互換性を保つ必要があるため拡張できません。

キャッシュとレート制限

  • Preview - プレビュー GraphQL APIを通じて提供されるコンテンツはキャッシュされていないため、繰り返しのロードに対して高速であることが期待されません。重負荷はSitecoreAIのインスタンス全体のパフォーマンスに影響を与える可能性があるため避けてください。
  • Delivery - Delivery GraphQL APIを通じて提供されるコンテンツがキャッシュされているため、同一のクエリの方がより速く動作するはずです。APIは1秒あたり80リクエストに 制限 されています。

リンク

リンクは異なる場合があります。プレビューは作成コンテキスト(サイトの仮想フォルダやプレビューホスト名を含む)でリンクを解決し、Deliveryは公開コンテキスト(標準的なパブリックルート)でリンクを解決します。

リッチテキストのメディアリンク

  • Preview- XMC Hybrid Media項目のPrivate Linkフィールドを使用します。

    !注XM Cloudは現在SitecoreAIです。エンジニアリング資産が更新されている間、一部のコード例、画像、UIラベルはXM Cloudを使用している場合があります。

  • Delivery - Public Linkフィールドを使う。

項目リンク LinkField

アイテムから特定のLinkFieldを読み込み、解決されたリンクURLを返すGraphQLクエリを考えてみましょう。

query GetLinkItemField($path: String, $language: String!, $name: String!) { item(path: $path, language: $language) { field(name: $name) { ... on LinkField { id value url } } } }

プレビューと配信でリンクURLがどのように解決されているかを比較してください:

  • Preview - リンクに仮想フォルダセグメントを含めることができます:

    "url": "/da/<VIRTUAL_FOLDER>/ItemWithLinkFields/TestLinkFolder/TestItem?TestQueryStringDa#AnchorDa"

  • Delivery - リンクが仮想フォルダセグメントを含まず公開されたルートパスを使用している場合:

    "url": "/da/ItemWithLinkFields/TestLinkFolder/TestItem?TestQueryStringDa#AnchorDa"

アイテムURL

ある項目のItem.urlオブジェクトを読み取るGraphQLクエリを考えます:

query GetItemUrl($path: String, $language: String!) { item(path: $path, language: $language) { id url { url path } } }

プレビューとデリバリーでurlとpathがどのように解決されているかを比較してください:

  • Preview - URLとパスがオーサリングホストおよび仮想フォルダを反映している:

    "url": "https://<ENVIRONMENT_HOST_NAME>/da/<VIRTUAL_FOLDER>/ItemWithLinkFields/TestLinkFolder/TestItem", "path": "/da/<VIRTUAL_FOLDER>/ItemWithLinkFields/TestLinkFolder/TestItem"

  • Delivery - URLとパスは公開されたサイトのホストおよびルートを反映している:

    "url": "https://<PUBLISHED_HOST>/da/ItemWithLinkFields/TestLinkFolder/TestItem", "path": "/da/ItemWithLinkFields/TestLinkFolder/TestItem"

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