Gestion des demandes d'API pour les magasins de données

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Avant d'envoyer des demandes d'ouverture des API du cloud pour stocker des données standard et stocker des données commandées, vous devez comprendre comment les gérer correctement. Pour plus d'informations sur l'utilisation de l'API, voir le Guide d'utilisation.

Authentification

Comme toutes les API du cloud ouvert, les points de fin de stockage des données nécessitent toutes les demandes pour inclure l'en-tête x-api-key, qui contient une clé API avec des permissions suffisantes pour la demande. Cela nécessite que vous appliquiez la clé à l'expérience et au boutiquede données, et l'opération de fin de la session est autorisée. Si la clé est invalide, <

Accélérateur

Tous les endpoints ont deux types de niveau d'univers : le niveau d'univers de demande par minute et le niveau d'univers de rotation . Avec chaque expérience, le niveau d'univers de demande par minute vous permet d'envoyer un certain nombre de demandes par minute, et 1> le niveau d'univers de rotation1> vous permet d'envoyer une certaine quantité de données par minute, peu importe

Contrairement à l'API Lua, ces limites ne se mettent pas à l'échelle en fonction du nombre d'utilisateurs. Le dépassement de ces limites provoque le retour de 429 Too Many Requests.

Limites de ralentissement des magasins de données standard

Type de demandeMéthodeLimites de vitesse
Écrire
  • Définir l'entrée
  • Incrément l'entrée
  • Supprimer l'entrée
  • 10 MB/min/universe write throughput
  • 300 requis/min/universe
Lire

    List Data Stores List Entries Get Entry 1> List Entry Versions1>

    4> Get Entry Version

    4>

  • 20 MB/min/universe write throughput
  • 300 requis/min/universe

Commandes de magasins de données suralimentation

Type de demandeMéthodeLimites de vitesse
Écrire
  • Créer
  • Incrément
  • Mettre à jour
  • 1> Supprimer1>

  • 300 requis/min/univers
Lire
  • Liste
  • Obtenez
  • 300 requis/min/univers

Validation d'entrée

Avant d'envoyer votre demande, assurez-vous de valider les paramètres d'extrémité sur les exigences de forme et les contraintes en fonction de la table suivante. Les endpoints individuels peuvent avoir des exigences supplémentaires au-delà de ces limites. Si un paramètre ne satisfait pas les limites suivantes, l'extrémité renvoie un 400 Bad Request .

EntréeTypeNotes
universeIdnumber

  • L'identifiant unique de votre expérience. Voir ID Univers .
  • >

datastoreNamechaîne
  • La longueur doit être de 50 octets ou inférieure.
  • Ne peut pas être nul ou vide.
scopechaîne
  • La portée d'un boutiquede données. Voir les portées .
  • la longueur doit être de 50 octets ou moins.
entryKeychaîne
  • La longueur doit être de 50 octets ou inférieure.
  • Ne peut pas être nul ou vide.
content-md5chaîne

  • La base 64 encodée MD5 checksum de contenu.
  • de contenu. Voir Content-MD5 .

    .

roblox-entry-attributeschaîne
  • Sérisé par l'objet JSON.
  • La longueur doit être inférieure à 300 octets.
roblox-entry-useridsChaîne
  • Sérisé par le tableau JSON de 0-4 numéros.
  • Pas plus de 4 ID d'utilisateur.
cursorchaîne

  • Un indicateur de plus de données disponibles dans le jeu de résultats configurer. Voir poignées .
  • >

ID de l'univers

L'identifiant unique de l'univers est l'identifiant unique de l'expérience dans laquelle vous voulez accéder à vos magasins de données. La valeur d'un identifiant d'univers d'expérience est la valeur de son DataModel.GameId, non pas la même que le lieu de départ ID, qui identifie le lieu de départ d'une expérience plutôt que l'ensemble de l'exp

Vous pouvez obtenir le ID de l'univers d'une expérience avec les étapes suivantes :

  1. Trouvez l'expérience avec les magasins de données que vous souhaitez accès.

  2. Cliquez sur le bouton sur la vignette de l'expérience cible pour afficher une liste d'options, puis sélectionnez Copier l'ID de l'univers .

    Copy Universe ID option from Creator Dashboard

Lunettes

Vous pouvez organiser vos magasins de données en configurant un champ unique en tant que champ de référence qui spécifie un sous-dossier pour l'entrée. Une fois que vous avez configuré un champ, il s'ajoute automatiquement à toutes les clés dans toutes les opérations effectuées sur le boutiquede données. Les champs sont facultatifs et par défaut comme global pour les magasins de données standard, mais requis pour les magasins de données ordonnés.

La catégorie scope transforme vos données avec une chaîne et un séparateur avec «/», tels que :

CléLunette
maisons/User_1maisons
animaux/User_1animaux de compagnie
inventaire/User_1inventaire

Toutes les méthodes d'entrée de données ont un Scope paramètre pour quand vous avez besoin d'accéder aux entrées stockées sous

En outre, si vous souhaitez enumerer toutes les clés stockées dans un data store qui a un ou plusieurs scopes non définis, vous pouvez dé

Vous ne pouvez pas passer les paramètres Scope et AllScopes sur la même demande, sinon l'appel renvoie une erreur. Leveraging les fonctions d'aide des API Open Cloud pour les magasins de données, le code suivant montre comment vous pouvez lire chaque clé dans un magasin de données avec un scope personnalisé :

Liste des clés pour différents scopes

# Configurer
import tutorialFunctions
DatastoresApi = tutorialFunctions.DataStores()
datastoreName = "PlayerInventory"
# Liste des clés pour la portée globale
specialScopeKeys = DatastoresApi.list_entries(datastoreName, scope = "global", allScopes = False)
print(keys.content)
# Liste des clés pour un champ spécial
specialScopeKeys = DatastoresApi.list_entries(datastoreName, scope = "special", allScopes = False)
print(keys.content)
# Liste des clés pour tous les scripts de scope configurés comme vrai
specialScopeKeys = DatastoresApi.list_entries(datastoreName, allScopes = True)
print(specialScopeKeys.content)

Les clés avec le champ d'application correspondant sont renvoyées dans la réponse :

Exemples de réponses pour différents scopes

// Réponse pour le champ global
{ "keys": [{ "scope": "global", "key": "User_2" }], "nextPageCursor": "" }
// Réponse pour le champ spécial
{"keys":[{"scope":"special","key":"User_6"},{"scope":"special","key":"User_7"}],"nextPageCursor":""}
// Réponse pour tous les scopes
{"keys":[{"scope":"global","key":"User_3"},{"scope":"global","key":"User_4"},{"scope":"global","key":"User_5"},{"scope":"special","key":"User_6"},{"scope":"special","key":"User_7"}],"nextPageCursor":""}

Contenu-MD5

Content-MD5 est le base-64 encodé MD5 checksum du contenu. Il s'agit d'un en-tête de requête optionnel pour le Set Entry point d'extrémité qui vérifie l'intégrité des données et détecte les problèmes potentiels.

Vous pouvez utiliser la langue de votre choix pour calculer la valeur de l'en-tête content-md5. L'exemple suivant utilise Python. Les fonctions hashlib.md5() et base64.b64Encode() sont disponibles dans les bibliothèques standard de Python (2.7, 3+).

Génération de contenu MD5

# Avec des prompts
$ python -c "import base64, hashlib; print('content-md5: ' + str(base64.b64encode(hashlib.md5(bytes(input('content: '), encoding='utf8')).digest()), encoding='utf8'))"
content: 750
content-md5: sTf90fedVsft8zZf6nUg8g==
# Utiliser seulement stdin etstdout
$ echo "750" | python -c "import base64, hashlib; print(str(base64.b64encode(hashlib.md5(bytes(input(), encoding='utf8')).digest()), encoding='utf8'))"
sTf90fedVsft8zZf6nUg8g==

Si vous rencontrez des problèmes de génération d'une valeur content-md5 valide, vous devrez peut-être encoder votre corps de requête en UTF-8 binaire avant de calculer le checksum.

Curseurs

Les points d'extrémité qui retournent des listes de données peuvent également retourner une chaîne nextPageCursor. Cela indique que plus de données sont disponibles dans le jeu de résultats configurer. Pour les recevoir, fournissez cette chaîne dans le paramètre de requête cursor suivant. Si le paramètre de requête est fourni mais invalide, le point d'extrémité renvoie 400 Bad Request.

Le format des chaînes de curseur n'est pas défini. Vous ne devriez pas les interpréter ou les analyser comme ils peuvent changer à tout moment.

Filtres

Lors de l'envoi de demandes au List``filter méthode pour les magasins de données commandés, vous pouvez ajouter un paramètre de requête facultatif filter pour renvoyer des entrées avec des valeurs dans une tranche spécifiée.

Le paramètre filter prend en charge un opérateur de logique, &&, et deux opérateurs de comparaison, <=, pour définir la valeur maximale et 1> >=1> pour définir la valeur minimum. Si vous souhaitez définir une gamme avec un maximum et un minimum, ajoutez 4> &&4> entre les deux séquences.

Par exemple, pour renvoyer des entrées avec des valeurs inférieures ou égales à 10, vous devez entrer entry <= 10 comme valeur filter. Pour renvoyer des entrées avec des valeurs entre 10 et 50, entrez entry <= 50 && entry >= 10 .

Les exemples suivants sont des valeurs invalides filter qui peuvent échouer vos demandes :

  • entry <= 10 - pas d'espace blanc entre chaque partie de la séquence.
  • 10 <= entry entrée) et la valeur de comparaison est sur le mauvais côté.
  • entry <= 10 && entry <= 50 - && ne peut être utilisé que pour spécifier une portée avec deux opérateurs de comparaison pour la valeur min et max.

Permettre les drapeaux manquants

Lors de l'envoi de demandes au Update méthode pour mettre à jour une entrée de stock de données commandée existante, vous pouvez ajouter un tag allow_missing optionnel pour permettre la création d'une entrée même si la entrée n'existe pas.

Lorsque vous avez configuré le allow_missing drapeau sur True :

  • Si l'entrée n'existe pas, la réponse renvoie une nouvelle entrée.

  • Si l'entrée existe mais que le contenu correspond à la valeur existante de l'entrée, l'entrée existante reste inchangée.

  • Si l'entrée existe et que le contenu ne correspond pas à la valeur existante de l'entrée, la réponse renvoie l'entrée avec la valeur de contenu mise à jour.