Hướng dẫn sử dụng cho các kho dữ liệu

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Ngoài việc truy cập lưu trữ dữ liệu bằng Lua DataStoreService ở Studio hoặc các máy chủ trực tiếp, bạn có thể sử dụng Open Cloud API để truy cập và sử dụng dữ liệu tiêu chuẩn và 1>lưu trữ dữ liệu đã đặt hạn

Sử dụng

Bạn có thể cải thiện một số khu vực của workflow của bạn bằng cách truy cập dữ liệu của bạn bằng các API này, chẳng hạn như:

  • Cổng hỗ trợ khách hàng : Data stores are useful for storing persistent user resources, such as items in user inventories or skill points. Đôi khi bạn cần phải cập nhật những nguồn dữ liệu này cho hỗ chăm sóc khách hànghàng. Thay vì sử dụng Studio hoặc tham gia vào một trải nghiệm mỗi lần bằng cách thủ công,

  • Bảng điều khiển LiveOps : Bạn có thể xây dựng bảng điều khiển LiveOps bằng cách sử dụng API để cải thiện hiệu quả của các hoạt động trực tiếp, chẳng hạn như lịch trình trong kinh nghiệm. Bạn có thể code một sự kiệ

  • Bảng xếp hạng ngoài tuyến : Để quảng bá trải nghiệm của bạn ngoài Roblox, bạn có thể lấy thông tin về trải nghiệm của bạn, chẳng hạn như bảng xếp hạng của một cuộc đua, trong thời gian thực và hiển thị nó trên một trang web ngoà

  • Tự động hóa dữ liệu di chuyển : Dữ liệu có thể thay đổi hoặc cập nhật như thể nâng cấp các bảng dữ liệu để chấp nhận các tính năng mới. Để tránh mất dữ liệu người dùng hiện tại, bạn

Sự khác biệt với API Lua

Mặc dù Open Cloud APIs giống như Lua DataStoreService , nhưng có một số yêu cầu khác nhau để được nhận ra:

  • ID và tên cửa hàng dữ liệu Universe : Ngược với Lua API, Open Cloud APIs là stateless và có thể đến từ bất cứ nơi nào, vì vậy bạn luôn cần phải cung cấp ID Universe , nhận dạng độc nhất của trải nghiệm của bạn, v

  • Các quyền truy cập riêng cho tạo và cập nhật : Lua API tạo những mục mới nếu chúng không tồn tại khi bạn gọi DataStore:SetAsync() , nhưng các phương thức Open Cloud cho tạo và cập nhật mụ

  • serialization dữ liệu : Tất cả các điểm kết nối mở đòi hỏi bạn phải serialize tất cả dữ liệu trước khi giao thức mạng. Việc serialization có nghĩa là chuyển đổi một đối tượng thành dữ liệu đó, và deserialization là ngược sở hữu(chuyển đổi một

Cài đặt an toàn

Các kho dữ liệu thường lưu trữ các thông tin nhạy cảm, chẳng hạn như hồ sơ người dùng và tiền tệđiện tử để duy trì sự an toàn. Để duy trì sự an toàn, mỗi Open Cloud API đều có các quyền truy c

Khi cấu hình các khóa API của bạn, bạn có thể cài đặt các quyền truy cập granular, chẳng hạn như đã xem, viết và lưu, cho mỗi kho dữ liệu trong một trải nghiệm cụ thể, hoặc bạn có thể đặt một chìa khóa

Công cụ Xây dựng

Bạn có thể sử dụng ngôn ngữ bạn chọn để xây dựng các công cụ bằng cách sử dụng Open Cloud APIs for data stores để hoàn thành các yêu cầu của bạn. Các ví dụ dưới đây cho thấy quá trình xây dựng một bảng điều khiển người dùng support portal

Cổng hỗ trợ Inventory người chơi

Các ví dụ trong phần này cung cấp một ví dụ cụ thể về việc xây dựng một cổng thông tin người dùng ở Python, trong đó bạn có thể danh sách và đọc một hạng ngục của kho đồ của người dùng của bạn, thực hiện các chỉnh sửa và sau đó cập nhật trở lại cửa hàng dữ liệu của trải nghiệm.

Đối với ví dụ này, hãy đoán xem những gì sau theo dõi:

  • Tên của cửa hàng dữ liệu lưu trữ thông tin người dùng là Inventory .

  • Cấu hình dữ liệu cho mỗi hàng dữ liệu là "userId": {"currency": number, "weapon": string, "level": number} . Chìa khóa là chỉ userId .

  • Script Python list một sub-game kho đồ của người dùng dựa trên các hệ số nhân, tăng nó lên 10 cho một quản lý thăng khuyến mãi, và cập nhật dữ liệu.

Từ một cấp độ cao, bạn có thể xây dựng ứng dụng Python của mình bằng cách thêm các quyền API và sau đó thêm các tập lệnh.

Thêm các quyền API cho Data Stores

Khi tạo một Chìa Khóa API cho ví dụ này, hãy đảm bảo bạn thực hiện các cài đặt sau đây:

  1. Từ menu Chọn hệ thống API trong mục quyền truy cập , chọn lưu trữ dữ liệu .

  2. (Bắt buộc) Trong phần Lưu trữ dữ liệu , chọn API cho một số lưu trữ dữ liệu cụ thể.

    1. Bật Cài đặt quản lý dữ liệu riêng tư của riêng tôi tùy chọn. Bởi mặc định, năm cửa hàng dữ liệu tự động tải, nhưng bạn có thể thêm thêm cửa hàng dữ liệu thông qua nút + Thêm dữ liệu store to list .
    2. Chọn mũi tên xuống dưới tên của một kho dữ cửa hàng, sau đó chọn các hoạt động API bạn muốn kho dữ liệu này có quyền truy cập.
  3. Chọn API cho toàn bộ trải nghiệm.

    1. Nhấp vào Chọn kinh nghiệm để thêm dạng dropdown và chọn một kinh nghiệm.
    2. Trong Trải nghiệm hoạt động , nhấp vào mũi tên xuống và chọn các hoạt động bạn muốn thêm vào API của bạn. This example selects Đọc bản văn nhập , Cập nhật bản văn nhập và 1> List Entry Keys1> cho toàn bộ trải nghiệm.
  4. Trong phần Bảo mật , hãy cài đặt truy cập IP bằng cách sử dụng CIDR notation , và cài đặt một ngày hết hạn cụ thể để cho phép key của bạn tự động ngừng hoạt động sau ngày đó.

Thêm Scripts cho User Inventory Support Portal

Sau khi tạo chìa khóa API với các quyền truy cập cần thiết cho ví dụ ứng dụng, bạn cần phải thêm các script Python

data_stores_phương tiện.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}"
# Chìa khóa API được lưu trong một biến môi trường được biểu tượng bằng '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}, có {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
cập nhật_inventory

import tutorialFunctions
DatastoresApi = tutorialFunctions.DataStores()
# Tạo dựng
datastoreName = "Inventory"
# Danh sách các phím cho một thân của người dùng (bạn có thể cần phải sử dụng NextPageCursor để xem các vị trí khác)
keys = DatastoresApi.list_entries(datastoreName)
print(keys.content)
# Đọc kho để tìm mỗi người dùng
for x in range(5):
updatedObjectKey = "User_"+str(x+1)
value = DatastoresApi.get_entry(datastoreName, updatedObjectKey)
# thay đổi kiểu đáp lại thành một chuỗi
updatedValue = value.json()
print(updatedObjectKey + " has "+str(updatedValue)+" gems in their inventory")
# Cập nhật tiền tệ của mỗi người dùng bằng 10
for x in range(5):
updatedObjectKey = "User_"+str(x+1)
value = DatastoresApi.increment_entry(datastoreName, updatedObjectKey, 10)
# thay đổi kiểu đáp lại thành một chuỗi
updatedValue = value.json()
print(updatedObjectKey + " now has "+str(updatedValue)+" robux in their inventory")

Để kiểm tra, tùy chỉnh API_KEY biến môi trường và chạy update_inventory file:


export API_KEY=... \
python update_inventory

Bảng xếp hạng nhân tạo ngoài

Đoạn này xem xét một ví dụ cụ thể về cách tạo một bảng xếp hạng người dùng ngoài hàng đợi trong Python, trong đó bạn có thể list và đọc thông tin người dùng được lưu trong các cửa hàng dữ liệu theo thứ tự, thực hiện các chỉnh sửa và sau đó xuất bản đến một trang web bên ngoài để khuyến mãi.

Đối với ví dụ này, hãy đoán xem những gì sau theo dõi:

  • Mẫu mã code tạo một danh sách tên người dùng đã định cho mục đích trình diễn tạm thời. Đối với ứng dụng của riêng bạn, bạn nên sử dụng danh sách người dùng thực tế trong trải nghiệm của bạn.

  • Mẫu mã mã thêm 50 điểm cho mỗi người tham gia trải nghiệm vì mục đích biểu tình. Đối với ứng dụng của riêng bạn, bạn nên định nguyên tắc dựa trên thiết kế của trải nghiệm của bạn.

Từ một cấp độ cao, bạn có thể xây dựng ứng dụng Python của mình bằng cách thêm các quyền API và sau đó thêm các tập lệnh.

Thêm các quyền API cho Cửa hàng Dữ liệu Đã đặt

Ứng dụng ví dụ yêu cầu bốn phương thức để thực hiện các chức năng của nó: List , 1> Update1> , 4> 5> Increment5> và 7> 8> Increment8> , v

  • Đọc cho phương thức list .
  • Viết cho Create , Update và 0> Increment0> các phương thức.

Khi tạo một Chìa Khóa API cho ví dụ này, hãy đảm bảo bạn thực hiện các hoạt động sau đây:

  1. Từ menu Chọn API System trong Access Permissions section, select Lưu trữ dữ liệu đã đặt hàng .

  2. Thêm các quyền truy cập API để đọc và viết dữ liệu lưu trữ trong trải nghiệm mục tiêu.

    1. Nhấp vào dòng Chọn kinh nghiệm để thêm dropdown và chọn kinh nghiệm mục tiêu.
    2. Trong Hoạt động kinh nghiệm , mở rộng menu dropdown để chọn ĐọcViết hoạt động.
  3. Trong phần Bảo mật , hãy cài đặt truy cập IP bằng cách sử dụng CIDR notation , và cài đặt một ngày hết hạn cụ thể để cho phép key của bạn tự động ngừng hoạt động sau ngày đó.

Thêm Scripts vào Bảng xếp hạng

Sau khi tạo chìa khóa API với các quyền truy cập cần thiết cho ứng dụngví dụ, bạn cần thêm các script Python để thực hiện các chức năng app.

Các tập tin ordened_data_stores.py

ordered_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
bảng xếp hạng.py

import leaderboardEndpoints
# nhập tập tin cấu hình ở đây
datastores = leaderboardEndpoints.DataStores("config.json")
# Biến
orderedDataStore = "PlayerScores"
scope = "global"
entryNames = ["Ragdoll", "Balinese", "Tabby", "Siamese"]
# Tạo một mục và cho mỗi người chơi mới 50 điểm vì đã tham gia trò chơi
for x in range(len(entryNames)):
r = datastores.create(orderedDataStore, scope, entryNames[x], 50)
# Hiển thị số điểm của người chơi
playerScores = datastores.list(orderedDataStore, scope)
print(playerScores.content)
# Tăng điểm số đầu tiên của người chơi để giành chiến thắng trò chơi
datastores.increment(orderedDataStore, scope, entryNames[0], 100)
# Tăng tất cả các điểm số của tất cả các người chơi để tham gia vào trò chơi
for x in range(len(entryNames)):
datastores.increment(orderedDataStore, scope, entryNames[x], 10)
# Hiển thị bảng xếp hạng với những cập nhật điểm số
playerScores = datastores.list(orderedDataStore, scope)
print(playerScores.content)
cấu hình

{
"universe_id": "",
"api_key_url": "https://apis.roblox.com/datastores/ipped-v1/",
"api_key": ""
}

Để kiểm tra, hãy cài đặt API_KEY môi trường và chạy file leaderboard :


export API_KEY=... \
python leaderboard

Sau khi hoàn thành kiểm tra, bạn có thể xuất bản hoặc gắn bảng xếp hạng lên các trang web bên ngoài Roblox để có được nhiều tiếp cận hơn.