次の方法で共有


バッチ データ アクション

この記事は、データ アクションのバッチ方法について説明します。

多くの場合、単一ページの読み込み時に同じアプリケーション プログラミング インターフェイス (API) への多数の呼び出しを必要とするアプリケーションがあります。 たとえば、1 つの製品ではなく、多くの製品に関する情報を提供する製品機能ページがあります。 一般的な方法では、製品を取得するためにデータ アクションに対して複数の呼び出しが行われます。 ただし、この方法では製品情報を取得するために個々の HTTP 要求が多数使用されるので、効率的ではない場合があります。 この問題を解決するために、データ アクション アーキテクチャはバッチ可能なデータ アクションをサポートしています。

バッチ データ アクションと標準データ アクションの主な違いは、アクション入力の配列に関するバッチ データ アクションのサポートです。 次の標準データ アクションの例で、getSimpleProductAction アクション メソッドが 1 つの ProductInput クラスのみを受け入れる点に注意してください。

async function getSimpleProductAction(input: ProductInput, ctx: IActionContext): Promise<SimpleProduct>

このデータ アクションをバッチ データ アクションに変更するには、メソッド シグニチャを変更して、メソッドが ProductInput クラスを受け入れ、SimpleProduct オブジェクトの配列を返すようにします。 次の例では、データ アクション メソッドを更新して、入力の配列を処理し、配列を返す方法を示しています。

async function getSimpleProductsAction(inputs: ProductInput[], ctx: IActionContext): Promise<SimpleProduct[]> {
    const { apiSettings } = ctx.requestContext;

    // Construct our HTTP request using information available in actionContext (ctx), and our Action Input (input)
    const requestUrl = `${apiSettings.baseUrl}/Products`;

    // Construct our request context from all the passed inputs
    const requestBody = {
        productIds: inputs.map(input => input.productId);
    }

    // Get the SimpleProducts
    return sendCommerceRequest<SimpleProduct[]>(requestUrl, 'post', requestBody})
        .then((response: IHTTPResponse) => {
            if(response.data) {
                return response.data;
            }
            ctx.trace('[getSimpleProductsAction] Invalid response from server');
            return <SimpleProduct[]>[];
        })
        .catch((error: IHTTPError) => {
            ctx.trace(error.message);
            ctx.trace(error.stack || '');
            ctx.trace(`Unable to Fetch Products.`);
            return <SimpleProduct[]>[];
        });
    }

入力の配列を処理できるようにデータアクションメソッドが更新されたので、アクション作成呼び出しの isBatched プロパティを true に設定する必要があります。

export default createObservableDataAction({
    action: <IAction<SimpleProduct[]>>getSimpleProductsAction,
    input: createInput,
    isBatched: true
});

このアクションはバッチ処理をサポートするようになったため、ページ読み込み中にアクションが複数の場所で呼び出された場合は、データ アクション フレームワークによって自動的に要求がグループ化されます。 そのため、この方法を使用すると、必要な HTTP 要求の数を最小限に抑え、パフォーマンスを最大限に高めるのに役立ちます。

メモ

一部の API では、バッチ処理がサポートされない場合があります。 したがって、バッチ データ アクションを作成する場合は、使用しているサービスがアクションをサポートできるかを確認する必要があります。

追加リソース

チェーン データ アクション

監視可能なデータ アクションの作成

モジュール間での状態の共有

データ アクション キャッシュの設定

データ アクションの上書き

データ アクションのフック