Selain mengakses Toko Data menggunakan Lua DataStoreService di Studio atau server live, Anda dapat menggunakan Open Cloud API untuk mengakses dan menggunakan 数据存储服务 dan 1> Toko Data Bersyarat1> dari skrip dan alat pihak ketiga dengan akses dan kontrol keamanan tingkat granular.
Penggunaan
Anda dapat meningkatkan beberapa area dari workflow Anda dengan mengakses data Anda dengan API ini, seperti:
Portal Dukungan Pelanggan : Toko data berguna untuk menyimpan sumber daya pengguna yang bertahan, seperti item dalam inventaris pengguna atau poin keterampilan. Terkadang Anda perlu menyimpan sumber daya ini untuk dukungan pelanggan. Daripada menggunakan Studio atau bergabung dengan pengalaman setiap kali secara manual, Anda dapat membangun aplikasi web untuk memungk
Dashboard LiveOps : Anda dapat membangun dashboard LiveOps menggunakan API untuk meningkatkan efisiensi operasi langsung, seperti menjadwalkan acara dalam pengalaman. Anda dapat menulis acara sebelumnya, menyembunyikannya di bawah bendera fitur sebagai bagian dari data konfigurasi di toko data, dan menetapkan waktu untuk mengganti bendera untuk menerbitkan ac
Papan Peringkat Eksternal : Untuk meningkatkan pengalaman Anda di luar Roblox, Anda dapat menarik informasi pengalaman Anda, seperti papan peringkat sebuah balapan, secara real time dan menampilikannya di situs web eksternal. Anda dapat memberikan akses hanya baca untuk data yang Anda pesan, seperti toko data yang dipesan, untuk situs web.
Otomatisasi Migrasi Data : Data mungkin berubah atau diperbarui saat waktu pengalaman Anda berkembang, seperti meningkatkan skema data untuk menyesuaikan fitur baru. Untuk menghindari kehilangan data pengguna yang ada, kadang-kadang Anda perlu migrasi data toko dari schema lama ke yang baru. Anda dapat menulis skrip eksternal
Perbedaan dengan API Lua
Meskipun Open Cloud APIs mirip dengan Lua DataStoreService , ada beberapa persyaratan yang berbeda untuk diperhatikan:
Nama dan ID Universe ID dan data store : Berbeda dengan Lua API, Open Cloud APIs stateless dan dapat datang dari mana saja, jadi Anda harus selalu menyediakan Nama dan ID Universe , identifikator unik pengalaman Anda, dan nama data store nama saat mengirim permintaan. Untuk informasi lebih lanjut tentang cara mendapatkan Universe ID, lihat
Ijin terpisah untuk membuat dan menyempurnakan permintaan : API Lua menciptakan entri baru jika mereka tidak ada ketika Anda memanggil DataStore:SetAsync() , tetapi metode Open Cloud untuk membuat dan menyempurnakan entri adalah terpisah. Ijin terpisah dapat lebih aman dan lebih fleksibel dalam
serialisasi data : Semua titik akhir Open Cloud mengharuskan Anda untuk m serialisasi semua data sebelum jaringan transportasi. Serialisasi berarti untuk mengubah objek menjadi string tersebut, dan deserialisasi adalah operasi terbaliknya (konversi string menjadi objek). API Lua secara otomatis serialisasi dan deserialisasi konten entri Anda, tetapi untuk Open Cloud Anda perlu menghasilkan atau menganalisis data entri Anda d
Izinkan Keamanan
Data biasanya menyimpan informasi sensitif, seperti profil pengguna dan mata uang virtual. Untuk menjaga keamanan, setiap Open Cloud API memiliki izin yang sesuai yang harus Anda tambahkan ke kunci API Anda, seperti izin List Keys untuk mata uang virtual. Jika Anda tidak menambahkan izin yang sesuai, panggilan
Ketika mengkonfigurasi kunci API Anda, Anda dapat menetapkan izin granular, seperti dilihat, menulis, dan menulis entri, untuk setiap data store dalam pengalaman tertentu, atau Anda dapat memberikan kunci untuk membaca atau menulis semua data store dalam pengalaman. Anda juga dapat membatasi akses ke beberapa data store yang diperlukan untuk alat Anda,
Alat Bangun
Anda dapat menggunakan bahasa pilihan Anda untuk membangun alat dengan Buka Cloud APIs untuk data penyimpanan data untuk memenuhi kebutuhan operasi Anda. Berikut adalah contoh yang berjalan melalui proses membangun portal inventaris pengguna di Python dengan penyimpanan data standar dan papan persisten eksternal menggunakan toko data yang diurutkan.
Portal Dukungan Inventaris Pengguna
Bagian ini menyediakan contoh pembangunan portal pendukung inventaris pengguna di Python, di mana Anda dapat mengumpulkan dan membaca subaset inventaris pengguna Anda, membuat perubahan, dan kemudian menyetel kembali ke toko data pengalaman.
Untuk contoh ini, asumsikan mengikuti:
Nama penyimpanan data yang menyimpan inventaris pengguna adalah Inventory.
Data schema untuk setiap entri data adalah "userId": {"currency": number, "weapon": string, "level": number} . Kunci hanya userId .
Skrip Python menyebutkan subjek pengguna berdasarkan prefiks, tingkatkan mata uang virtual mereka dengan 10 untuk promosi, dan update data.
Dari leveltinggi, Anda dapat membangun aplikasi Python Anda dengan menambahkan izin kunci API dan kemudian menambahkan skrip.
Menambahkan Ijin API untuk Toko Data
Ketika membuat Kunci API untuk contoh ini, pastikan Anda melakukan pengaturan berikut:
Dari menu Pilih Sistem API di bagian Akses Izin , pilih toko data universal .
(Opsional) Di bagian Data Tokens , pilih operasi API untuk toko data tertentu.
- Aktifkan tombol Toko Data Khusus secara default, lima toko data secara otomatis load, tetapi Anda dapat menambahkan toko data tambahan melalui tombol Tambahkan Toko Data ke Daftar .
- Pilih panah turun yang berada di samping nama toko data, lalu pilih operasi API yang ingin Anda miliki akses ke.
Pilih operasi API untuk seluruh pengalaman.
- Klik Pilih Pengalaman untuk Menambahkan dropdown dan pilih pengalaman.
- Dalam Pengalaman Operasi , klik panah dropdown dan pilih operasi yang ingin Anda tambahkan ke API Anda. Contoh ini memilih Baca Masukan , Update Masukan , dan 1> Daftar Kunci Masukan1> untuk seluruh pengalaman.
Dalam bagian Keamanan , secara eksplisit tetapkan akses IP ke kunci menggunakan notasi CIDR , dan tetapkan tanggal kedaluwarsa yang eksplisit sehingga kunci Anda secara otomatis berhenti bekerja setelah tanggal itu. Untuk contoh ini, jika Anda berencana untuk melakukan tes
Menambahkan Skrip untuk Portal Dukungan Inventaris Pengguna
Setelah menciptakan kunci API dengan izin yang dibutuhkan untuk aplikasi contoh, Anda perlu menambahkan skrip Python untuk mengeksekkan fungsionalitas aplikasi. File data
data_stores_methods.py
import hashlib
import requests
import json
import base64
class DataStores:
def __init__(self):
self._base_url = "https://apis.roblox.com/datastores/v1/universes/{universeId}"
# Kunci API disimpan dalam tanda variabel lingkungan bernama 'API_KEY'
self._apiKey = str(os.environ['API_KEY'])
self._universeId = "UNIVERSE_ID"
self.ATTR_HDR = 'Roblox-entry-Attributes'
self.USER_ID_HDR = 'Roblox-entry-UserIds'
self._objects_url = self._base_url +self._universeId+'/standard-datastores/datastore/entries/entry'
self._increment_url = self._objects_url + '/increment'
self._version_url = self._objects_url + '/versions/version'
self._list_objects_url = self._base_url +self._universeId+'/standard-datastores/datastore/entries'
def _H(self):
return { 'x-api-key' : self._apiKey }
def _get_url(self, path_format: str):
return f"{self._config['base_url']}/{path_format.format(self._config['universe_id'])}"
return r, attributes, user_ids
def get_entry(self, datastore, object_key, scope = None):
self._objects_url = self._base_url +self._universeId+'/standard-datastores/datastore/entries/entry'
headers = { 'x-api-key' : self._apiKey }
params={"datastoreName" : datastore, "entryKey" : object_key}
if scope:
params["scope"] = scope
r = requests.get(self._objects_url, headers=headers, params=params)
if 'Content-MD5' in r.headers:
expected_checksum = r.headers['Content-MD5']
checksum = base64.b64encode(hashlib.md5(r.content).digest())
#print(f'Expected {Expected_checksum}, mendapatkan {checksum})
attributes = None
if self.ATTR_HDR in r.headers:
attributes = json.loads(r.headers[self.ATTR_HDR])
user_ids = []
if self.USER_ID_HDR in r.headers:
user_ids = json.loads(r.headers[self.USER_ID_HDR])
return r
def list_entries(self, datastore, scope = None, prefix="", limit=100, allScopes = False, exclusive_start_key=None):
self._objects_url = self._base_url +self._universeId+'/standard-datastores/datastore/entries'
headers = { 'x-api-key' : self._apiKey }
r = requests.get(self._objects_url, headers=headers, params={"datastoreName" : datastore, "scope" : scope, "allScopes" : allScopes, "prefix" : prefix, "limit" : 100, "cursor" : exclusive_start_key})
return r
def increment_entry(self, datastore, object_key, incrementBy, scope = None, attributes=None, user_ids=None):
self._objects_url = self._base_url +self._universeId+'/standard-datastores/datastore/entries/entry/increment'
headers = { 'x-api-key' : self._apiKey, 'Content-Type': 'application/octet-stream' }
params={"datastoreName" : datastore, "entryKey" : object_key, "incrementBy" : incrementBy}
if scope:
params["scope"] = scope
r = requests.post(self._objects_url, headers=headers, params=params)
attributes = None
if self.ATTR_HDR in r.headers:
attributes = json.loads(r.headers[self.ATTR_HDR])
user_ids = []
if self.USER_ID_HDR in r.headers:
user_ids = json.loads(r.headers[self.USER_ID_HDR])
return r
update_inventori
import tutorialFunctionsDatastoresApi = tutorialFunctions.DataStores()# MengaturdatastoreName = "Inventory"# Daftar kunci untuk subset pengguna (Anda mungkin perlu menggunakan NextPageCursor untuk melihat entri lain)keys = DatastoresApi.list_entries(datastoreName)print(keys.content)# Baca inventaris untuk setiap penggunafor x in range(5):updatedObjectKey = "User_"+str(x+1)value = DatastoresApi.get_entry(datastoreName, updatedObjectKey)# ubah jenis respons menjadi stringupdatedValue = value.json()print(updatedObjectKey + " has "+str(updatedValue)+" gems in their inventory")# Perbarui mata uang setiap pengguna dengan 10for x in range(5):updatedObjectKey = "User_"+str(x+1)value = DatastoresApi.increment_entry(datastoreName, updatedObjectKey, 10)# ubah jenis respons menjadi stringupdatedValue = value.json()print(updatedObjectKey + " now has "+str(updatedValue)+" robux in their inventory")
Untuk menguji, tetapkan variabel lingkungan API_KEY dan eksekuti file update_inventory :
export API_KEY=... \python update_inventory
Papan Peringkat Permanen Eksternal
Bagian ini menunjukkan contoh kasus pembuatan papan peringkat persisten eksternal di Python, di mana Anda dapat mengumpulkan dan membaca informasi pengguna Anda yang tersimpan dalam toko data berurutan, membuat perubahan, dan kemudian menerbitkan ke situs web eksternal untuk promosi.
Untuk contoh ini, asumsikan mengikuti:
Sampel kode menciptakan daftar nama pengguna yang telah ditentukan untuk tujuan demo. Untuk aplikasi Anda sendiri, Anda harus menggunakan daftar pengguna aktual dalam pengalaman Anda.
Sampel kode menambahkan 50 poin ke setiap pengguna yang bergabung dengan pengalaman untuk tujuan demo. Untuk aplikasi Anda sendiri, Anda harus mendefinisikan aturan berdasarkan desain pengalaman Anda.
Dari leveltinggi, Anda dapat membangun aplikasi Python Anda dengan menambahkan izin kunci API dan kemudian menambahkan skrip.
Menambahkan Ijin API untuk Toko Data yang Dipesan
Aplikasi contoh memerlukan empat metode untuk mencapai fungsionalitasnya: List Create 0> Update0> 1> 2> Increment2> dan 5> 6> Increment5> , jadi Anda perlu menambahkan izin API berikut:
- Baca untuk metode list .
- Menulis untuk Create , Update , dan 0> Increment0> metode.
Ketika membuat Kunci API untuk contoh ini, pastikan Anda melakukan operasi berikut:
Dari menu Pilih Sistem API di bagian Akses Ijin , pilih Toko Data yang Dipesan .
Tambahkan izin operasi API untuk membaca dan menulis toko data yang diperintahkan dalam pengalaman target.
- Klik Pilih Pengalaman untuk Menambahkan dropdown dan pilih pengalaman target.
- Dalam Operasi Pengalaman , buka menu dropdown untuk memilih Baca dan Tulis operasi.
Dalam bagian Keamanan , secara eksplisit tetapkan akses IP ke kunci menggunakan notasi CIDR , dan tetapkan tanggal kedaluwarsa yang eksplisit sehingga kunci Anda secara otomatis berhenti bekerja setelah tanggal itu. Untuk contoh ini, jika Anda berencana untuk melakukan tes
Menambahkan Skrip untuk Papan Peringkat
Setelah menciptakan kunci API dengan izin yang dibutuhkan untuk aplikasi contoh, Anda perlu menambahkan skrip Python untuk mengeksekusi fungsionalitas aplikasi.
File ordered_data_stores.py menunjukkan cara mendef
ders_data_stores.py
import hashlib
import requests
import json
class DataStores:
def __init__(self, config_file):
with open(config_file) as f:
self._config = json.load(f)
def _H(self):
return { 'x-api-key' : self._config["api_key"], 'Content-Type': 'application/json'}
def _get_url(self, path_format: str):
return f"{self._config['base_url']}/{path_format.format(self._config['universe_id'])}"
def list(self, datastore, scope, pageSize = 10, orderBy = "", filter = "", exclusiveStartKey = ""):
self._objects_url = self._config['api_key_url']+"universes/"+self._config["universe_id"]+"/orderedDataStores/"+datastore+"/scopes/"+scope+"/entries"
headers = { 'x-api-key' : self._config["api_key"] }
r = requests.get(self._objects_url, headers=headers, params={"max_page_size": pageSize, "order_by" : orderBy, "filter" : filter, "page_token" : ""})
return r
def create(self, datastore, scope, entry, data):
self._objects_url = self._config['api_key_url']+"universes/"+self._config["universe_id"]+"/orderedDataStores/"+datastore+"/scopes/"+scope+"/entries"
headers = self._H()
payload = json.dumps({
"value": 11
})
return requests.post(self._objects_url, params = {"id": entry }, data=payload, headers=headers)
def increment(self, datastore, scope, entry, incrementBy):
self._objects_url = self._config['api_key_url']+"universes/"+self._config["universe_id"]+"/orderedDataStores/"+datastore+"/scopes/"+scope+"/entries/"+entry+":increment"
headers = { 'x-api-key' : self._config["api_key"] }
payload = json.dumps({
"amount": 1
})
r = requests.post(self._objects_url, headers=headers, data=payload)
return r
papan peringkat.py
import leaderboardEndpoints# masukkan file konfigurasi di sinidatastores = leaderboardEndpoints.DataStores("config.json")# VariabelorderedDataStore = "PlayerScores"scope = "global"entryNames = ["Ragdoll", "Balinese", "Tabby", "Siamese"]# Buat entri dan berikan setiap pemain baru 50 poin untuk bergabung dengan gamefor x in range(len(entryNames)):r = datastores.create(orderedDataStore, scope, entryNames[x], 50)# Tampilkan skor pemainplayerScores = datastores.list(orderedDataStore, scope)print(playerScores.content)# Tingkatkan skor pemain pertama untuk memenangkan gamedatastores.increment(orderedDataStore, scope, entryNames[0], 100)# Tingkatkan semua skor pemain untuk berpartisipasi dalam gamefor x in range(len(entryNames)):datastores.increment(orderedDataStore, scope, entryNames[x], 10)# Tampilkan papan peringkat dengan skor yang diperbaruiplayerScores = datastores.list(orderedDataStore, scope)print(playerScores.content)
konfigurasi
{
"universe_id": "",
"api_key_url": "https://apis.roblox.com/datastores/uredang-v1/",
"api_key": ""
}
Untuk menguji, tetapkan variabel lingkungan API_KEY dan eksekuti file leaderboard :
export API_KEY=... \python leaderboard
Setelah menyelesaikan tes, Anda dapat menerbitkan atau menyematkan papan peringkat ke situs web di luar Roblox untuk lebih banyak jangkauan.