GraphQLコンテンツ スキーマ
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Sitecore GraphQLには、Sitecoreコンテンツ項目のクエリに使用する標準スキーマ プロバイダーがあります。このプロバイダーは、厳密に型指定されたテンプレート アクセス、フィールド タイプ メタデータのサポート、およびその他の機能を備えているため、コンテンツ データを必要とするほとんどのSitecoreフロントエンド プロジェクトにとって理想的なアクセス レイヤーとなっています。
厳密に型指定された項目
厳密に型指定された項目
GraphQLは型とインターフェースをサポートしており、テンプレート定義をスキーマに挿入して使用します。テンプレート フィールドは、特定のタイプからフィールドを選択するインライン フラグメントを使用して、厳密に型指定された方法で取得できます。次に、この方法でデフォルトのホーム項目のフィールドを取得する例を示します。
このクエリは、次のようなものを返します。
GraphQL型システムは、テンプレートの継承をサポートしています。次の例は、アイテムのInsert Optionsが指すアイテムを取得する方法を示しています。
入力フィールドへのアクセス
入力フィールドへのアクセス
Sitecore GraphQLは、リンク フィールドやマルチリストなどのフィールド値への入力アクセスをサポートしています。
次に、拡張サンプルアイテムテンプレートで実行されるパスでアイテムをクエリする例を示します。
前の例で定義したクエリの場合、Sitecore GraphQLは次のようなデータ構造を返します。
テンプレートへのアクセス
テンプレートへのアクセス
APIを使用してSitecoreテンプレートにアクセスできます。
GraphQL型システムにより、ownFieldsによって返される型は、項目フィールドの定義によって返される同じ型の配列であり、実装は同じです。これにより、特別なアイテムのフィルタリングの結果を公開する場合など、豊富なAPIを簡単に公開できます。次に、GraphQLフィールドからItemInterfaceGraphTypeを返し、それをソースとしてItemに渡します。 ItemInterfaceGraphTypeクエリのフル機能は、テンプレートフィールド定義の取得など、消費者が利用できます。
コンテンツ検索API
コンテンツ検索API
キーワード検索のニーズを満たすように設計された基本的なコンテンツSearch APIがありますが、これは主に、検索クエリが一般的なAPI提供できる範囲を超えて複雑さが急速に増す可能性があるためです。このAPIの使用例を次に示します。
結果は次のようになります。
サブスクリプション
サブスクリプション
サブスクリプションは、リアルタイムのデータ更新を単純に抽象化したものです。これはSignalRの動作方法と似ていますが、サブスクリプションが特定の種類のGraphQLクエリに制限される点が異なります。クエリを実行しましたが、すぐには結果が得られません。クエリは、停止するように指示するまで開いたままになり、クエリは複数のリアルタイム結果を返すことができます。ユースケースの例としては、itemSavedサブスクリプションがあります。
このサブスクリプションが開始されると、コンテンツ エンドポイントのデータベースにアイテムが保存されるたびに、新しいクエリ結果が取得されます。
サブスクリプションは、WebSocketプロトコルを使用して、そのリアルタイム性を有効にします。これにより、UIのリアルタイム要素が可能になります。サブスクリプションは、サーバー上のReactive Extensionsおよびクライアント上のRxJSのObservableパターンによく適合します。オブザーバブルは、イベントの非同期ストリーム、または複数回解決できるJavaScript Promiseと考えることができます。
一意の名前
一意の名前
Sitecoreでは、複数のテンプレートに同じ名前を付けたり ( Fileなど)、名前がアイテム グラフ タイプのコア フィールドと競合するフィールドを持つテンプレート ( Iconなど) を設定できます。
GraphQLでは、型とフィールドの名前は一意である必要があります。名前の競合が発生すると、作成日が最新のアイテムまたはフィールド アイテム _{guid} 名前に追加されます。作成日が使用されるのは、順序が安定している必要があるため、グラフ・タイプ名は参照後に変更されません。間違えてシステムテンプレートと同じ名前のテンプレートを作成した場合、システムテンプレートのグラフタイプ名は古いため変わりません。
この問題を回避するために、Sitecoreで定義されたテンプレートのサブセットのみを強く入力できます。これは、お客様が作成したAPIエンドポイントのベストプラクティスであり、プロジェクトで定義されたテンプレートのみを提供する必要があるためです。