Référence API : multiGetObjects
Récupère les détails de plusieurs objets en une seule requête réseau.
-Classe: SuiClient
- Method Type: Opération de lecture, pas de gaz
Aperçu
L'utilisation de multiGetObjects s'avère beaucoup plus efficace que d'appeler getObject dans une boucle. Elle réduit la latence du réseau en combinant plusieurs requêtes en un seul appel de procédure à distance (RPC).
Signature
client.multiGetObjects(input : MultiGetObjectsParams) : Promesse<SuiObjectResponse[]>
Paramètres
La méthode accepte un objet de configuration avec les propriétés suivantes :
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
ids | string[] | Oui | Un tableau d'ID d'objets hexadécimaux de 32 octets. |
options | SuiObjectDataOptions | Non | Drapeaux de configuration pour activer des champs de données spécifiques. S'applique à tous les objets demandés. |
La plupart des nœuds RPC publics appliquent une limite de 50 ID par requête. Pour des lots plus importants, vous devez diviser votre tableau en morceaux.
Valeur de retour
Retourne une Promesse qui se résout en un tableau d'objets SuiObjectResponse.
L'ordre du tableau correspond exactement à l'ordre des id passés dans la requête.
[
{
"data" : { "objectId" : "0xA...", "version" : "1", ... }
},
{
"error" : {"code" : "notExists", "object_id" : "0xB..." }
},
{
"data" : {"objectId" : "0xC...", "version" : "5", ... }
}
]
Exemples d'utilisation
Scénario A : récupération en masse de métadonnées
Imaginez que vous disposiez d'une liste d'identifiants de jetons non fongibles (NFT) et que vous ayez besoin d'afficher leurs noms.
const objectIds = ['0x123...', '0x456...', '0x789...'] ;
const results = await client.multiGetObjects({
ids : objectIds,
options : {
showContent : true,
showDisplay : true
}
}) ;
// Traiter les résultats
results.forEach((result) => {
if (result.data) {
console.log("Found Item :", result.data.display ?.data ?.name) ;
} else {
console.warn("Item failed to load :", result.error) ;
}
}) ;
Scénario B : Traitement des grandes listes par découpage
Étant donné qu'une limite de 50 éléments, par exemple, s'applique à chaque requête, il convient d'utiliser une aide au découpage pour les listes volumineuses.
import { chunk } from 'lodash' ; // ou votre propre aide
const allIds = [/* ... tableau de 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 }
}) ;
// Traite les résultats du lot...
}
Meilleures pratiques
1. Toujours gérer les échecs partiels
Contrairement à une requête de base de données standard qui pourrait arrêter tout le lot en cas d'erreur, multiGetObjects renvoie un résultat pour chaque ID. Même si vous supprimez un objet ( ***** ), les autres retournent toujours un résultat positif ( **** ). Vous devez vérifier data vs error pour chaque élément du tableau retourné.
2. Préservation de l'ordre
Le SDK garantit que le tableau de sortie correspond à l'index du tableau d'entrée.
results[0]correspond àids[0].results[1]correspond àids[1].
Vous pouvez compter sur cela pour mapper les résultats vers votre source de données originale.