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
キーワード検索のニーズを満たすように設計された基本的なコンテンツ検索APIがありますが、これは主に、検索クエリが汎用APIで提供できる範囲を超えて複雑さが急速に増す可能性があるためです。このAPIの使用例を次に示します。
結果は次のようになります。
サブスクリプション
サブスクリプション
サブスクリプションは、リアルタイムのデータ更新を単純に抽象化したものです。これはSignalRの動作方法と似ていますが、サブスクリプションが特定の種類のGraphQLクエリに制限される点が異なります。クエリを実行しましたが、すぐには結果が得られません。クエリは、停止するように指示するまで開いたままになり、クエリは複数のリアルタイム結果を返すことができます。ユースケースの例としては、itemSavedサブスクリプションがあります。
このサブスクリプションが開始されると、コンテンツ エンドポイントのデータベースにアイテムが保存されるたびに、新しいクエリ結果が取得されます。
サブスクリプションは、WebSocketプロトコルを使用して、そのリアルタイム性を有効にします。これにより、UIのリアルタイム要素が有効になります。サブスクリプションは、サーバー上のReactive Extensionsおよびクライアント上のRxJSのObservableパターンによく適合します。オブザーバブルは、イベントの非同期ストリーム、または複数回解決できるJavaScript Promiseと考えることができます。
一意の名前
一意の名前
Sitecoreでは、複数のテンプレートに同じ名前 ( Fileなど) を付けたり、アイテム グラフ タイプのコア フィールドと名前が競合するフィールドを持つテンプレート ( Iconなど) を持つことができます。
GraphQLでは、型とフィールドの名前は一意である必要があります。名前の競合が発生すると、作成日が最新のアイテムまたはフィールド アイテム _{guid} 名前に追加されます。作成日が使用されるのは、順序が安定している必要があるため、グラフ・タイプ名は参照後に変更されません。間違えてシステムテンプレートと同じ名前のテンプレートを作成した場合、システムテンプレートのグラフタイプ名は古いため変わりません。
この問題を回避するために、Sitecoreで定義されているテンプレートのサブセットのみを厳密に入力できます。これは、お客様が作成したAPIエンドポイントのベストプラクティスであり、プロジェクトで定義されたテンプレートのみを提供する必要があるためです。