バッチ データ アクション
この記事は、データ アクションのバッチ方法について説明します。
多くの場合、単一ページの読み込み時に同じアプリケーション プログラミング インターフェイス (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 では、バッチ処理がサポートされない場合があります。 したがって、バッチ データ アクションを作成する場合は、使用しているサービスがアクションをサポートできるかを確認する必要があります。