SXA StorefrontからCommerce Engineへの通話

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

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

Commerce Connectはさまざまな外部コマース システムで動作するように設計されているため、各サービス レイヤーの既定のドメイン モデルが付属しています。これらのドメイン モデルは、各サービス レイヤー APIが対象とするシナリオに必要な共通データを表します。Sitecore XC 9.3より前は、Commerce EngineへのすべてのAPI呼び出しはCommerce Connectサービス レイヤーを経由していました。Commerce Connectは、Sitecoreの エクスペリエンス分析との統合 としても機能し、xDBで分析イベントをトリガーします。分析が不要な場合は、次の図に示すように、ストアフロントからCommerce Engineに直接呼び出しを行う方が理にかなっています。これにより、ドメイン モデルとの間でデータをマップする不要な必要がなくなります。

Storefront calls to Commerce Engine

サービスレイヤー APIは、ストアフロントとCommerce Engineの間で共通データを渡します。サービスレイヤー APIは エクスペリエンス分析 (XA) と統合されているため、詳細なデータを収集して、コマース シナリオで顧客が実行したアクションに基づいてレポート、パーソナライゼーション、マーケティング自動化を実現できます。XAとの統合が必要ない場合は、Commerce Connectをバイパスすると、柔軟性とパフォーマンスが向上します。Commerce Engineを直接呼び出すと、ドメイン モデルへのデータのマッピングと、ドメイン モデルからのコールバックが不要になります。マッピング自体はリソースを消費し、拡張に対応するためにカスタムオブジェクトを定義し、登録する必要があるため、簡単に拡張することはできません。JSON形式でデータを渡すと、コード登録が不要になり、パフォーマンスのオーバーヘッドが少なくなるため、拡張と消費が容易になります。そのため、Sitecore XC 9.3以降、エクスペリエンス分析との対話を伴わず、Commerce Engineに直接移動するAPI呼び出しが新機能に導入されました。

次のセクションでは、直接呼び出しの実装パターンと、Commerce Engineへの直接呼び出しを行う方法を示す例を確認できます。

メモ

現在、通話は引き続きコンテンツ配信 (CD) サーバーの役割を経由します。つまり、AJAX呼び出しの場合でも、顧客のブラウザーから呼び出され、最初にCDインスタンスに移動し、そこから直接Commerce Engineに移動します。今後のリリースでは、Commerce Engine APIに関する適切なセキュリティ対策が講じられていると仮定して、呼び出しをお客様のブラウザから直接行い、CDインスタンスをバイパスしてCommerce Engineに移動できるようになる可能性があります。

実装パターン

実装パターンの一般的な説明は、次の6つの部分から構成されます。

  1. Commerce Engineのターゲット メソッドへのURIを取得します。

  2. HTTPリクエストヘッダーにコンテキスト情報を追加します。

  3. 要求の本文に、入力パラメーターを追加します。

  4. HTTP要求を非同期的に送信します。

  5. 結果を待ちます。

  6. HTTP結果の本文を文字列値として返し、常にJSON形式 (呼び出し元のコードによって解釈されます) を返します。

次のコードは、ストアフロントからCommerce Engineに直接呼び出しを行い、顧客の構成と選択に基づいて製品バンドルの価格を取得するための実装パターンの例です。

RequestResponse
 /// <summary>
        /// Gets the bundle selection price.
        /// </summary>
        /// <param name="model"></param>
        /// <returns>string of JSON containing prices</returns>  
        public virtual async Task<string>  GetBundleSelectionPrice(BundleItemModel model)
        {
            // Obtain URI to targeted method for Commerce Engine
            var uri = new Uri(CommerceEngineConfiguration.Instance.ShopsServiceUrl + "GetBundleSelectionPrice");
                           // Add context information in header
            var request = new HttpRequestMessage(HttpMethod.Post, uri);
            request.Headers.Add("ShopName", StorefrontContext.CurrentStorefront.ShopName);
            request.Headers.Add("Environment", EngineConnectUtility.GetShopEnvironment());
            request.Headers.Add("EffectiveDate", GetCurrentDate().ToString(CultureInfo.InvariantCulture));
            request.Headers.Add("Language", Context.Culture.Name);
            request.Headers.Add("Currency", StorefrontContext.CurrentStorefront.SelectedCurrency);
            request.Headers.Add("IsRegistered", Context.User.IsAuthenticated.ToString(CultureInfo.InvariantCulture));
            request.Headers.Add("Authorization", CommerceEngineConfiguration.Instance.AccessToken);

            // set content by adding the input parameter containing the model
            var modelStr = JsonConvert.SerializeObject(model);
            request.Content = new StringContent(modelStr, Encoding.UTF8, "application/json");

                            // Wait for the result
            var result = await HttpClient.SendAsync(request).ConfigureAwait(false);

            return await 
result.Content.ReadAsStringAsync().ConfigureAwait(false);
        }

何かフィードバックはありますか?

この記事を改善するための提案がある場合は、