Prima di inviare richieste di Open Cloud API per archivi di dati standard e archivi di dati ordinati, devi capire come gestirli correttamente. Per informazioni sull'uso dell'API, vedi il Guida all'uso.
Autorizzazione
Come tutte le API Open Cloud, i punti di fine del magazzino dei dati richiedono tutte le richieste per includere l'x-api-key header, che contiene un'API chiave con abbastanza autorizzazioni per la Richiesta. Ciò richiede che tu applichi la chiave all'esperienza e al Negoziodei dati, e l'operazione del punto di fine è autorizzata. Se la chiave non è val
Acceleratore
Tutti gli endpoint hanno due tipi di livello di universe level throttling: richiesta-per-minuto throttling e attraverso il filtro di velocità . Con ogni esperienza, richiesta-per-minutoธrottling ti consente di inviare un certo numero di richieste al minuto, e 1> attraverso il filtro di velocitàธrottling1> ti
A differenza dell'API Lua, questi limiti attualmente non si basano sui conti utente. L'eccesso di questi limiti fa in modo che l'endpoint restituisca 429 Too Many Requests .
Limiti di velocità di archiviazione standard
Tipo di richiesta | Metodo | Limitazioni acceleratore |
---|---|---|
Scrivi |
|
|
Leggi | List Data Stores List Entries Get Entry 1> List Entry Versions1> 4> Get Entry Version 4> |
|
Ordinamento dei limiti di velocità dei magazzini dei dati
Tipo di richiesta | Metodo | Limitazioni acceleratore |
---|---|---|
Scrivi |
1> Elimina 1> |
|
Leggi |
|
|
Validazione dell'input
Prima di inviare la tua Richiesta, assicurati di validare i parametri端口 in base ai requisiti di formattazione e restrizioni sulla tabella seguente. I singoli端口 possono avere ulteriori requisiti oltre a queste. Se un parametro non soddisfa le seguenti restrizioni, il端口 restituisce un 400 Bad Request .
Inserisci | Tipo | Note |
---|---|---|
universeId | number |
|
datastoreName | stringa |
|
scope | stringa |
|
entryKey | stringa |
|
content-md5 | stringa |
|
roblox-entry-attributes | stringa |
|
roblox-entry-userids | Stringa |
SerIALizzato dall' array JSON di 0-4 numeri. |
cursor | stringa |
|
ID dell'Universo
L'ID dell'Universo è l'identificatore unico dell'esperienza in cui vuoi accedere ai tuoi store di dati. Il valore di un'esperienza di ID dell'Universo è il valore del suo DataModel.GameId, non Class.DataModel.GameId che identifica il luogo di partenza di un'esperienza piuttosto che l'intera esperienza.
Puoi ottenere l'ID dell'Universo di un'esperienza con i seguenti passaggi:
Vai alla Dashboard del Creatore .
Trova l'esperienza con i magazzini di dati che vuoi Accesso.
Fai clic sul pulsante ⋯ sulla miniatura dell'esperienza target per visualizzare una lista di opzioni, quindi seleziona Copia ID dell'universo .
Campi di visione
Puoi organizzare i tuoi magazzini dati impostando una singola stringa come scala che specifica una subcartella per l'elemento. Una volta impostata una scala, viene automaticamente aggiunta a tutte le chiavi in tutte le operazioni eseguite sul Negoziodati. Le scala sono opzionali e per impostazione predefinita come global per i magazzini dati standard ma richieste per i magazzini dati ordinati.
La categoria di dati consente di categorizzare i tuoi dati con una stringa e un separatore con "/", come segue:
Chiave | Scopo |
---|---|
case/User_1 | case |
pets/Utente_1 | animale domestico |
inventario/User_1 | inventario, reportorio |
Tutti i metodi di entrata del magazzino di dati hanno un Scope parametro per quando si deve accedere alle ent
Inoltre, se vuoi elencare tutte le chiavi memorizzate in un data store che hanno uno o più scopi non predefiniti, puoi
Non puoi passare Scope e AllScopes parametri sullo stesso Richiesta, altrimenti la chiamata restituisce un errore. L'uso delle funzioni di aiuto dalle API Open Cloud per i datastore moduli, il seguente codice illustra come puoi leggere ogni chiave in un datastore con uno scopo personalizzato:
Elenca i tasti per diversi scopi
# Configurareimport tutorialFunctionsDatastoresApi = tutorialFunctions.DataStores()datastoreName = "PlayerInventory"# Elenca le chiavi per l'ambito globalespecialScopeKeys = DatastoresApi.list_entries(datastoreName, scope = "global", allScopes = False)print(keys.content)# Elenca le chiavi per lo scopo specialespecialScopeKeys = DatastoresApi.list_entries(datastoreName, scope = "special", allScopes = False)print(keys.content)# Elencare le chiavi per tutti gli script set to truespecialScopeKeys = DatastoresApi.list_entries(datastoreName, allScopes = True)print(specialScopeKeys.content)
Le chiavi con lo spettro corrispondente sono restituite nella risposta:
Risposte di esempio per diversi campi di visione
// Risposta per l'ambito globale
{ "keys": [{ "scope": "global", "key": "User_2" }], "nextPageCursor": "" }
// Risposta per lo scope speciale
{"keys":[{"scope":"special","key":"User_6"},{"scope":"special","key":"User_7"}],"nextPageCursor":""}
// Risposta per AllScopes
{"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":""}
Contenuto-MD5
Content-MD5 è il base-64 encoded MD5 checksum di contenuto. È un richiesta opzionale per il Set Entry punto di interruzione che controlla l'integrità dei dati e rileva potenziali problemi.
Puoi usare il linguaggio di tua scelta per calcolare il valore del content-md5 header. L'esempio seguente usa Python. Le funzioni hashlib.md5() e base64.b64 encode() sono disponibili nelle librerie standard di Python (2.7, 3+).
Generazione di contenuti-MD5
# Con messaggi di prom示$ python -c "import base64, hashlib; print('content-md5: ' + str(base64.b64encode(hashlib.md5(bytes(input('content: '), encoding='utf8')).digest()), encoding='utf8'))"content: 750content-md5: sTf90fedVsft8zZf6nUg8g==# Uso solo di cmd e cmd$ echo "750" | python -c "import base64, hashlib; print(str(base64.b64encode(hashlib.md5(bytes(input(), encoding='utf8')).digest()), encoding='utf8'))"sTf90fedVsft8zZf6nUg8g==
Se ti imbatti in problemi durante la generazione di un valore content-md5 valido, potresti dover incodificare il tuo corpo di richiesta in UTF-8 prima di calcolare il checksum.
Cursores
I punti di fine potrebbero anche restituire una StringanextPageCursor . Ciò indica che ci sono più dati disponibili nel risultato richiesto. Per riceverlo, fornisci questa stringa nel parametro di Richiestacursor . Se il parametro di richiesta non è fornito ma Non valido, il punto di fine restituisce 400 Bad Request.
Il formato delle stringhe del cursore non è non definito . Non dovresti interpretarli o parlarli come potrebbero cambiare in qualsiasi momento.
Filtra
Quando si inviano richieste al metodo List per i magazzini di dati ordinati, si può aggiungere un parametro di query opzionale filter per restituire gli elementi con valori in un intervallo specificato.
Il parametro filter supporta un operatore logico, && , e due operatori di confronto, <= per impostare il valore massimo e 1> >=1> per impostare il valore minimo. Se vuoi impostare una gamma con un valore massimo e un valore minimo, aggiungi 4> &&4> tra le due sequenze.
Ad esempio, per restituire gli elementi con valori che sono inferiore o uguale a 10, devi inserire entry <= 10 come valore filter . Per restituire gli elementi con valori tra 10 e 50, inserisci entry <= 50 && entry >= 10 .
I seguenti esempi sono corretti filter valori che possono fallire le tue richieste:
- entry <= 10 - niente spazio tra ciascuna parte della sequenza.
- 10 <= entry - entry e il valore di confronto è sul lato sbagliato.
- entry <= 10 && entry <= 50 - && può essere utilizzato solo per specificare un intervallo con entrambi gli operatori di confronto per il valore minimo e massimo.
Consenti bandiere mancanti
Quando si inviano richieste al metodo Update per aggiornare un'archiviazione di dati ordinati esistente, si può aggiungere un flag opzionale allow_missing per consentire la creazione di un'archiviazione anche se l'archiviazione non esiste.
Quando impostate il allow_missing flag a True :
Se l'elemento non esiste, la risposta restituisce un nuovo elemento.
Se l'entry esiste ma il contenuto corrisponde al valore esistente dell'entry, l'entry esistente rimane inalterato.
Se l'entry esiste e il contenuto non corrisponde al valore di aggiornamento dell'entry, la risposta restituisce l'entry con il nuovo valore di contenuto aggiornato.