Selain mengakses penyimpanan data menggunakan API Mesin ( DataStoreService ) di Studio atau server langsung, Anda dapat menggunakan API Cloud Terbuka untuk mengakses dan memanfaatkan data standar dan data berurutan dari skrip dan alat eksternal dengan akses dan kontrol keamanan granular.
Penggunaan
Anda dapat meningkatkan beberapa area alur kerja Anda dengan mengakses data Anda dengan API ini, seperti:
Portal Dukungan Pelanggan : Penyimpanan data berguna untuk menyimpan sumber daya pengguna tetap, seperti item di inventaris pengguna atau poin keterampilan.Terkadang Anda perlu memperbarui sumber daya ini untuk dukungan pelanggan.Daripada menggunakan Studio atau bergabung dengan pengalaman secara manual, Anda dapat membuat aplikasi web untuk memungkinkan agen layanan pelanggan Anda untuk secara langsung menangani permintaan dukungan pelanggan, seperti melihat dan memodifikasi inventaris pengguna dan mengeluarkan pengembalian dana.
Dashboard LiveOps : Anda dapat membuat dashboard LiveOps menggunakan API untuk meningkatkan efisiensi operasi langsung.Sebagai contoh, Anda mungkin menjadwalkan acara sebelumnya, menyembunyikannya di bawah bendera fitur sebagai bagian dari data konfigurasi di penyimpan data, dan menetapkan waktu untuk menggeser bendera untuk mempublikasikan acara.Server pengalaman Anda dapat mendeteksi perubahan ini dengan membaca bendera untuk meluncurkan acara.
Papan Peringkat Eksternal : Untuk mempromosikan pengalaman Anda di luar Roblox, Anda dapat menarik informasi pengalaman Anda, seperti papan peringkat balapan, secara real time dan menampilkannya di situs web eksternal.Anda dapat memberikan akses hanya baca ke toko data yang dipesan untuk situs web untuk secara berkala meminta data terbaru melalui HTTP dan memperbarui halaman web.
Otomatisasi Migrasi Data : Data mungkin berubah atau diperbarui saat pengalaman Anda berkembang, seperti meningkatkan skema data untuk menampung fitur baru.Untuk menghindari kehilangan data pengguna yang ada, terkadang Anda perlu memindahkan penyimpanan data Anda dari skema lama ke yang baru.Anda dapat menulis skrip eksternal yang membaca setiap entri dari penyimpanan data saat ini, mengubah data ke skema baru, dan menulis entri kembali ke penyimpanan data baru untuk mengotomatisasi migrasi data.
Perbedaan dengan Engine API
Meskipun API Cloud Terbuka mirip dengan DataStoreService, ada beberapa perbedaan kunci:
Nama ID dan penyimpanan data alam semesta : Tidak seperti Engine API, API Cloud Terbuka tidak statis dan bisa berasal dari mana saja, jadi Anda harus selalu memberikan ID alam semesta , pengenal unik dari pengalaman Anda, dan nama penyimpanan data nama saat mengirimkan permintaan.Untuk informasi lebih lanjut tentang cara mendapatkan ID alam semesta, lihat ID Alam Semesta .
Izin terpisah untuk membuat dan memperbarui : API Mesin membuat entri baru jika tidak ada saat Anda memanggil DataStore:SetAsync() , tetapi metode Open Cloud untuk membuat dan memperbarui entri terpisah.Izin terpisah bisa lebih aman dan lebih fleksibel dalam situasi tertentu.Sebagai contoh, Anda dapat membuat alat dukungan pelanggan yang dapat mengedit profil pengguna yang ada, tetapi tidak dapat membuat profil pengguna baru.
Serialisasi data : Semua titik akhir Cloud Terbuka memerlukan Anda untuk meng serialisasi semua data sebelum transportasi jaringan.Serialisasi berarti mengubah objek menjadi string.Deserialisasi adalah kebalikan (mengubah string menjadi objek).API Mesin meng serialisasi dan mereset konten entri secara otomatis, tetapi untuk Open Cloud, Anda perlu menghasilkan atau mem parse data entri Anda dengan JSON memiliki.
Otorisasi keamanan
Toko data sering 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 unitAPI Anda, seperti izin List Keys untuk API daftar.Jika Anda tidak menambahkan izin yang diperlukan, panggilan API Anda mengembalikan kesalahan.Untuk izin khusus yang diperlukan untuk setiap operasi, lihat referensi API dari standar dan toko data terstruktur.
Saat mengkonfigurasi kunci API Anda, Anda dapat menetapkan izin granular, seperti dilihat, menulis, dan daftar entri, untuk setiap penyimpanan data dalam pengalaman tertentu, atau Anda dapat memberikan kunci untuk membaca atau menulis semua penyimpanan data dalam pengalaman.Anda juga dapat membatasi akses ke subset penyimpanan data yang diperlukan untuk alat Anda alih-alih mengekspos semua penyimpanan data.Ini mengurangi dampak jika kunci Anda bocor.
Alat membangun
Anda dapat menggunakan bahasa pilihan Anda untuk membangun alat dengan API Cloud Terbuka untuk penyimpanan data untuk memenuhi kebutuhan operasi Anda.Contoh berikut memandu melalui proses membangun portal inventaris pengguna di Python dengan penyimpanan data standar dan papan peringkat eksternal permanen menggunakan penyimpanan data yang diurutkan.
Portal dukungan inventaris pengguna
Bagian ini memberikan contoh konkret tentang membangun portal dukungan inventaris pengguna di Python, di mana Anda dapat daftar dan membaca sebagian subset inventaris pengguna Anda, membuat perubahan, dan kemudian memperbarui kembali ke penyimpanan data pengalaman.
Untuk contoh ini, asumsikan hal mengikuti:
Nama toko data yang menyimpan inventaris pengguna adalah Inventory .
Skema data untuk setiap entri data adalah "userId": {"currency": number, "weapon": string, "level": number} . Kunci hanya userId .
Skrip Python daftar subset inventaris pengguna berdasarkan pr prefiks, meningkatkan mata uang virtual mereka sebesar 10 untuk promosi, dan memperbarui data.
Dari leveltinggi, Anda dapat membangun aplikasi Python dengan menambahkan izin kunci API dan kemudian menambahkan skrip.
Tambahkan izin kunci API untuk penyimpanan data
Saat membuat Kunci API untuk contoh ini, pastikan Anda melakukan pengaturan berikut:
Dari menu Pilih Sistem API di bagian Akses Izin , pilih univers-datastores .
(Opsi) Di bagian Toko Data , pilih operasi API untuk penyimpanan data tertentu.
- Aktifkan toggle Operasi Penyimpanan Data Khusus .Secara default, lima penyimpanan data loadsecara otomatis, tetapi Anda dapat menambahkan penyimpanan data tambahan melalui tombol + Tambahkan Toko Data ke Daftar .
- Pilih panah dropdown di samping nama tokodata, lalu pilih operasi API yang ingin dipakai penyimpanan data.
Pilih operasi API untuk seluruh pengalaman.
- Klik tombol Pilih Pengalaman untuk Ditambahkan dropdown dan pilih pengalaman.
- Di dalam Operasi Pengalaman , klik panah dropdown dan pilih operasi yang ingin Anda tambahkan ke API Anda.Contoh ini memilih Baca Entri , Perbarui Entri , dan Kunci Entri Daftar untuk seluruh pengalaman.
Di bagian Keamanan , jelaskan akses IP ke kunci menggunakan notasi CIDR, dan atur tanggal kedaluwarsa eksplisit sehingga kunci Anda secara otomatis berhenti berfungsi setelah tanggal itu.Untuk contoh ini, jika Anda berencana melakukan pengujian lokal terlebih dahulu, Anda dapat menghapus batasan IP dengan mengatur ke 0.0.0.0/0 dan membiarkannya kedaluwarsa dalam 30 hari .
Tambahkan skrip untuk portal dukungan inventaris pengguna
Setelah membuat kunci API dengan izin yang diperlukan untuk aplikasi contoh, Anda perlu menambahkan kode JavaScript untuk melakukan fungsionalitas aplikasi.File data_stores_methods.js menunjukkan cara mendefinisikan List Entries , Get Entry , dan Increment Entry metode.File update_inventory.js menggunakan metode yang didefinisikan untuk mencantumkan subset inventaris pengguna, meningkatkan mata uang virtual untuk setiap pengguna, dan memperbarui data.
dataStoresMethods.js
const fetch = require('node-fetch');
class DataStores {
constructor() {
this._baseUrl =
'https://apis.roblox.com/datastores/v1/universes/{universeId}';
this._apiKey = process.env.API_KEY;
this._universeId = 'UNIVERSE_ID';
this.ATTR_HDR = 'Roblox-entry-Attributes';
this.USER_ID_HDR = 'Roblox-entry-UserIds';
this._objectsUrl = `${this._baseUrl}${this._universeId}/standard-datastores/datastore/entries/entry`;
this._incrementUrl = `${this._objectsUrl}/increment`;
this._listObjectsUrl = `${this._baseUrl}${this._universeId}/standard-datastores/datastore/entries`;
}
async _getHeaders() {
return { 'x-api-key': this._apiKey };
}
async getEntry(datastore, objectKey, scope = null) {
const url = `${
this._objectsUrl
}?datastoreName=${datastore}&entryKey=${objectKey}&scope=${scope || ''}`;
const response = await fetch(url, { headers: await this._getHeaders() });
const data = await response.json();
return data;
}
async listEntries(datastore, scope = null, prefix = '', limit = 100) {
const url = `${this._listObjectsUrl}?datastoreName=${datastore}&scope=${scope}&prefix=${prefix}&limit=${limit}`;
const response = await fetch(url, { headers: await this._getHeaders() });
const data = await response.json();
return data;
}
async incrementEntry(datastore, objectKey, incrementBy, scope = null) {
const url = `${
this._incrementUrl
}?datastoreName=${datastore}&entryKey=${objectKey}&incrementBy=${incrementBy}&scope=${
scope || ''
}`;
const response = await fetch(url, {
method: 'POST',
headers: await this._getHeaders(),
});
const data = await response.json();
return data;
}
}
module.exports = DataStores;
updateInventory.js
const DataStores = require('./dataStoresMethods');
const dataStoresApi = new DataStores();
// Set up
const datastoreName = 'Inventory';
// List keys for a subset of users
dataStoresApi.listEntries(datastoreName).then((keys) => {
console.log(keys);
});
// Read inventory for each user
for (let x = 0; x < 5; x++) {
const updatedObjectKey = `User_${x + 1}`;
dataStoresApi.getEntry(datastoreName, updatedObjectKey).then((value) => {
console.log(
`${updatedObjectKey} has ${value.gems} gems in their inventory`
);
});
}
// Update the currency of each user by 10
for (let x = 0; x < 5; x++) {
const updatedObjectKey = `User_${x + 1}`;
dataStoresApi
.incrementEntry(datastoreName, updatedObjectKey, 10)
.then((value) => {
console.log(
`${updatedObjectKey} now has ${value.robux} robux in their inventory`
);
});
}
Untuk menguji, atur variabel lingkungan API_KEY dan jalankan file JavaScript:
export API_KEY=... \node updateInventory.js
papan peringkatperingkat permanen eksternal
Bagian ini melalui contoh konkret tentang cara membuat papan peringkat eksternal permanen di Python, di mana Anda dapat daftar dan membaca informasi pengguna yang disimpan di toko data terurut, membuat perubahan, dan kemudian dipublikasikan ke situs web eksternal untuk promosi.
Untuk contoh ini, asumsikan hal mengikuti:
Sampel kode membuat daftar nama pengguna yang sudah ditentukan untuk tujuan demo.Untuk aplikasi Anda sendiri, Anda harus menggunakan daftar pengguna aktual di pengalaman Anda.
Sampel kode menambahkan 50 poin kepada 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 dengan menambahkan izin kunci API dan kemudian menambahkan skrip.
Tambahkan izin kunci API untuk penyimpanan data yang dipesan
Contoh aplikasi membutuhkan empat metode untuk mencapai fungsionalitasnya: List , Create , Update dan Increment , jadi Anda perlu menambahkan izin API berikut:
- Baca untuk metode list.
- Tulis untuk Create , Update , dan metode Increment .
Saat membuat Kunci API untuk contoh ini, pastikan Anda melakukan operasi berikut:
Dari menu Pilih Sistem API di bagian Akses Izin , pilih Toko Data Terurut .
Tambahkan izin operasi API untuk membaca dan menulis toko data yang diperintahkan di pengalaman target.
- Klik tombol Pilih Pengalaman untuk Ditambahkan dropdown dan pilih pengalaman target.
- Di dalam Operasi Pengalaman , perluas dropdown untuk memilih Baca dan Tulis operasi.
Di bagian Keamanan , jelaskan akses IP ke kunci menggunakan notasi CIDR, dan atur tanggal kedaluwarsa eksplisit sehingga kunci Anda secara otomatis berhenti berfungsi setelah tanggal itu.Untuk contoh ini, jika Anda berencana melakukan pengujian lokal terlebih dahulu, Anda dapat menghapus batasan IP dengan mengatur ke 0.0.0.0/0 dan membiarkannya kedaluwarsa dalam 30 hari .
Tambahkan skrip untuk papan peringkat
Setelah membuat kunci API dengan izin yang diperlukan untuk aplikasi contoh, Anda perlu menambahkan kode JavaScript untuk melakukan fungsionalitas aplikasi.
File menunjukkan cara mendefinisikan , , , dan metode.File leaderboard.js menggunakan metode yang didefinisikan untuk membuat entri pengguna di toko data terurut, menampilkan skor, meningkatkan skor pengguna pemenang, dan memperbarui papan peringkat.File leaderboard.js juga men导入 file config.json untuk mengonfigurasi ID Alam Semesta, domain API, dan unitAPI Anda.
ordered_data_stores.js
const axios = require('axios');
const fs = require('fs');
class DataStores {
constructor(configFile) {
this._config = JSON.parse(fs.readFileSync(configFile, 'utf-8'));
}
_H() {
return {
'x-api-key': this._config.api_key,
'Content-Type': 'application/json',
};
}
async list(
datastore,
scope,
pageSize = 10,
orderBy = '',
filter = '',
exclusiveStartKey = ''
) {
const url = `${this._config.api_key_url}universes/${this._config.universe_id}/orderedDataStores/${datastore}/scopes/${scope}/entries`;
const response = await axios.get(url, {
headers: this._H(),
params: {
max_page_size: pageSize,
order_by: orderBy,
filter: filter,
page_token: exclusiveStartKey,
},
});
return response.data;
}
async create(datastore, scope, entry, data) {
const url = `${this._config.api_key_url}universes/${this._config.universe_id}/orderedDataStores/${datastore}/scopes/${scope}/entries`;
const payload = JSON.stringify({ value: 11 });
const response = await axios.post(url, payload, {
headers: this._H(),
params: { id: entry },
});
return response.data;
}
async increment(datastore, scope, entry, incrementBy) {
const url = `${this._config.api_key_url}universes/${this._config.universe_id}/orderedDataStores/${datastore}/scopes/${scope}/entries/${entry}:increment`;
const payload = JSON.stringify({ amount: incrementBy });
const response = await axios.post(url, payload, { headers: this._H() });
return response.data;
}
}
leaderboard.js
const leaderboardEndpoints = require('./ordered_data_stores');
const datastores = new leaderboardEndpoints.DataStores('config.json');
// Variables
const orderedDataStore = 'PlayerScores';
const scope = 'global';
const entryNames = ['Ragdoll', 'Balinese', 'Tabby', 'Siamese'];
// Create an entry and give each new player 50 points for joining the game
entryNames.forEach(async (name) => {
await datastores.create(orderedDataStore, scope, name, 50);
});
// Display the players' scores
datastores.list(orderedDataStore, scope).then((playerScores) => {
console.log(playerScores);
});
// Increment the first player's score for winning the game
datastores.increment(orderedDataStore, scope, entryNames[0], 100);
// Increment all the players' scores for participating in the game
entryNames.forEach(async (name) => {
await datastores.increment(orderedDataStore, scope, name, 10);
});
// Display the updated leaderboard
datastores.list(orderedDataStore, scope).then((updatedPlayerScores) => {
console.log(updatedPlayerScores);
});
konfigasi
{
"universe_id": "",
"api_key_url": "https://apis.roblox.com/datastores/ordered-v1/",
"api_key": ""
}
Untuk menguji, atur variabel lingkungan API_KEY dan jalankan file leaderboard.js:
export API_KEY=... \node leaderboard.js
Setelah menyelesaikan pengujian, Anda dapat mempublikasikan atau menyematkan papan peringkat ke situs web di luar Roblox untuk lebih banyak jangkauan.