API リファレンス: multiGetObjects
1 回のネットワーク リクエストで多数のオブジェクトの詳細を取得します。
クラス: SuiClient
メソッドタイプ: 読み取り操作、ガス代不要
概要
multiGetObjects を使用することは、getObject をループ内で呼び出すよりもはるかに効率的です。多数のクエリを単一の RPC(リモート プロシージャ コール)にまとめることで、ネットワーク レイテンシを削減します。
シグネチャ
client.multiGetObjects(input: MultiGetObjectsParams): Promise<SuiObjectResponse[]>
パラメーター
このメソッドは、以下のプロパティを含む構成オブジェクトを受け入れます。
| パラメーター | タイプ | 必須 | 説明 |
|---|---|---|---|
ids | string[] | はい | 32 バイトの 16 進数オブジェクト ID の配列。 |
options | SuiObjectDataOptions | いいえ | 特定のデータ フィールドを切り替えるための構成フラグ。リクエストされたすべてのオブジェクトに適用されます。 |
ほとんどのパブリック RPC ノードでは、通常 1 リクエストあたり 50 個の ID という制限が設けられています。より大きなバッチの場合は、配列をチャンク(塊)に分割する必要があります。
戻り値
SuiObjectResponse オブジェクトの配列に解決される Promise を返します。
配列の順序は、リクエストで渡された ids の順序と正確に一致します。
[
{
"data": { "objectId": "0xA...", "version": "1", ... }
},
{
"error": { "code": "notExists", "object_id": "0xB..." }
},
{
"data": { "objectId": "0xC...", "version": "5", ... }
}
]
使用例
シナリオ A: メタデータの一括取得
NFT(非代替性トークン)の ID リストがあり、それらの名前を表示する必要があるとします。
const objectIds = ['0x123...', '0x456...', '0x789...'];
const results = await client.multiGetObjects({
ids: objectIds,
options: {
showContent: true,
showDisplay: true
}
});
// 結果を処理する
results.forEach((result) => {
if (result.data) {
console.log("アイテムが見つかりました:", result.data.display?.data?.name);
} else {
console.warn("アイテムの読み込みに失敗しました:", result.error);
}
});
シナリオ B: チャンク分割による大量のリストの処理
1 リクエストあたり(例えば)50 アイテムの制限が適用されるため、大量のリストにはチャンク分割用のヘルパーを使用します。
import { chunk } from 'lodash'; // または自作のヘルパー
const allIds = [/* ... 200 個の ID 配列 ... */];
const CHUNK_SIZE = 50;
const chunks = chunk(allIds, CHUNK_SIZE);
for (const batch of chunks) {
const batchResults = await client.multiGetObjects({
ids: batch,
options: { showType: true }
});
// batchResults を処理する...
}
ベストプラクティス
1. 部分的な失敗を常に処理する
エラーが発生するとバッチ全体が停止する可能性のある標準的なデータベース クエリとは異なり、multiGetObjects はすべての ID に対して結果を返します。1 つのオブジェクトが失敗した場合(例:削除されていた場合)でも、バッチ内の他のオブジェクトは正常に返されます。返された配列の各アイテムについて、data と error を確認する必要があります。
2. 順序の保持
SDK は、出力配列が入力配列のインデックスと一致することを保証します。
results[0]はids[0]に対応します。results[1]はids[1]に対応します。
これを利用して、結果を元のデータ ソースにマッピングし直すことができます。