Référence API : multiGetObjects
Récupère les détails et les métadonnées sur la chaîne pour plusieurs objets Sui en une seule requête groupée, à partir de leurs identifiants d'objet hexadécimaux de 32 octets.
Utilisez cette méthode pour regrouper plusieurs requêtes d'objets en un seul appel réseau, ce qui réduit la latence par rapport à des requêtes individuelles. Comme multiGetObjects est une opération de lecture servie directement à partir de l'état local du nœud complet, elle s'exécute immédiatement sans soumettre de transaction ni consommer de gas.
- Classe :
SuiClient - Paquet :
@mysten/sui/client - Type d'opération : opération de lecture (sans gas, sans signature de portefeuille)
Aperçu
L'appel de la méthode multiGetObjects s'avère bien plus efficace que l'appel de getObject dans une boucle. Il réduit la latence réseau en regroupant plusieurs requêtes d'objets en un seul appel de procédure à distance (RPC).
getObject séquentiel (N allers-retours) :
App ── getObject(A) ──► Fullnode ──► App ── getObject(B) ──► Fullnode
multiGetObjects par lots (1 aller-retour) :
App ──────────── multiGetObjects([A, B, C]) ────────────► Fullnode
App ◄─────────── [ResultA, ResultB, ResultC] ─────────── Fullnode
Signature
client.multiGetObjects(input: MultiGetObjectsParams): Promise<SuiObjectResponse[]>
Paramètres
La méthode accepte un objet de configuration comportant les propriétés suivantes :
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
ids | string[] | Oui | Un tableau d'identifiants d'objets hexadécimaux de 32 octets. |
options | SuiObjectDataOptions | Non | Indicateurs de configuration pour activer ou désactiver des champs de données spécifiques. S'applique à tous les objets demandés. |
La plupart des nœuds RPC publics imposent une limite généralement fixée à 50 identifiants par requête. Pour les lots plus volumineux, vous devez diviser votre tableau en plusieurs fragments.
Valeur de retour
Renvoie une Promise qui se résout en un tableau d'objets SuiObjectResponse.
L'ordre des éléments du tableau correspond exactement à l'ordre des identifiants transmis dans la requête :
[
{
"data": { "objectId": "0xA...", "version": "1" }
},
{
"error": { "code": "notExists", "object_id": "0xB..." }
},
{
"data": { "objectId": "0xC...", "version": "5" }
}
]
Exemples d'utilisation
Récupération en masse des métadonnées de NFT et des attributs d'affichage
Interrogez une liste d'identifiants de NFT pour afficher les champs sur la chaîne et les URL des images :
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("Élément trouvé :", result.data.display?.data?.name);
} else {
console.warn("Échec du chargement de l'élément :", result.error);
}
});
Découper les longues listes d'identifiants pour respecter les limites de traitement par lots
Étant donné qu'une limite de 50 éléments s'applique par requête sur la plupart des nœuds RPC publics, utilisez une fonction utilitaire de découpage pour les listes volumineuses :
import { chunk } from 'lodash'; // ou votre propre fonction utilitaire
const allIds = [/* ... tableau de 200 identifiants ... */];
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 }
});
// Traiter batchResults...
}
Bonnes pratiques
Gérer les échecs partiels par élément
Contrairement à une requête de base de données classique qui peut interrompre l'ensemble du lot en cas d'erreur, multiGetObjects renvoie un résultat pour chaque ID. Même si un objet échoue (par exemple, s'il a été supprimé par une transaction), les éléments restants du lot sont tout de même renvoyés avec succès. Vérifiez toujours data et error pour chaque élément du tableau renvoyé.
S'appuyer sur la préservation de l'ordre des index
Le SDK conserve l'ordre des index du tableau d'entrée :
results[0]correspond àids[0]results[1]correspond àids[1]
Vous pouvez vous fier à cet ordre pour mapper les résultats directement à votre source de données d'origine.
Voir aussi
getObject: récupérer les détails d'un objet individuel sur la chaîne.getOwnedObjects: répertorier tous les objets détenus par une adresse spécifique.- Comment récupérer les données d'un objet : tutoriel étape par étape pour mettre en œuvre les opérations de lecture dans un script Node.js.
- L'architecture de SuiClient : présentation conceptuelle de
SuiClientet des opérations de lecture.