---
title: "プレビューAPIとデリバリーGraphQL APIの違い"
slug: "differences-between-the-preview-and-the-delivery-graphql-apis"
abstract: ""
---
# プレビューAPIとデリバリーGraphQL APIの違い

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

## クエリ複雑性

クエリの複雑さはAPIごとに異なる計算方法で行われます。実際には、プレビュー GraphQL APIエンドポイントで実行されるクエリはDeliveryエンドポイントでも実行されるべきですが、クエリが大きいか深く入れ子状の場合は [両方のエンドポイントをテスト](https://doc.sitecore.com/sai/ja/developers/sitecoreai/experience-edge/experience-edge-best-practices.html "Experience Edge best practices") する必要があります。

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

未公開コンテンツと公開コンテンツで利用可能なフィールドに違いがあるため、Experience Edgeで公開されているコンテンツを検索する際は、[Experience Edgeスキーマドキュメントで説明されているフィールド](https://doc.sitecore.com/sai/ja/developers/sitecoreai/experience-edge/experience-edge-apis/the-experience-edge-schema.html#available-fields-for-content-search) を使用することを推奨します。さらに、追加したフィールドについては、[標準テンプレートのフィールドを公開可能にしてください](https://doc.sitecore.com/sai/ja/developers/sitecoreai/experience-edge/publishing-to-experience-edge/making-fields-from-the-standard-template-publishable.html)。

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

-   現場の利用可能性は異なる場合があります:
    -   *Preview* - 公開されたコンテンツに存在しないフィールドを公開できる。
    -   *Delivery* - Experience Edgeスキーマに記載されたフィールドと、明示的に公開した標準テンプレートフィールドのみを公開します。
-   \_latestversion[の検索フィールド](https://doc.sitecore.com/sai/ja/developers/sitecoreai/experience-edge/experience-edge-apis/the-experience-edge-schema.html "The Experience Edge schema")は異なる挙動を示します:
    -   *Preview* - フィールドは最新の利用可能なバージョンを返し、 false がすべてのバージョンを返すことを可能にします。
    -   *Delivery* - フィールドは最新の公開可能なバージョンを返し、 trueのみを受け入れます。
-   [Searchオペレーターの挙動](https://doc.sitecore.com/sai/ja/developers/sitecoreai/experience-edge/experience-edge-apis/the-experience-edge-schema.html#search-operator-behavior) はプレビューエンドポイントとデリバリーエンドポイント間で異なります。

## スキーマ拡張

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

## キャッシュとレート制限

-   *Preview* - プレビュー GraphQL APIを通じて提供されるコンテンツはキャッシュされていないため、繰り返しのロードに対して高速であることが期待されません。重負荷はSitecoreAIのインスタンス全体のパフォーマンスに影響を与える可能性があるため避けてください。
-   *Delivery* - Delivery GraphQL APIを通じて提供されるコンテンツがキャッシュされているため、同一のクエリの方がより速く動作するはずです。APIは1秒あたり80リクエストに [制限](https://doc.sitecore.com/sai/ja/developers/sitecoreai/experience-edge/limitations-and-restrictions-of-experience-edge.html "Limitations and restrictions of Experience Edge") されています。

## リンク

リンクは異なる場合があります。プレビューは作成コンテキスト(サイトの仮想フォルダやプレビューホスト名を含む)でリンクを解決し、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"