Wzory

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Ta strona pokrywa częste wzory z interfejsami Open Cloud, w szczególności wokół tworzenia wniosków i zarządzania odpowiedziami.

Ścieżki

Aby złożyć wniosek o dostęp do API Open Cloud, musisz najpierw utworzyć URL. Ten URL to kombinacja podstawowego URL ( https://apis.roblox.com/cloud/v2 ) i drogi Open Cloud API (na przykład, /uniwerses/universe-id/places/place-id/user-restraints


https://apis.roblox.com/cloud/v2/users/4687549151/inventory-items?maxPageSize=100

Wiele ścieżek, w tym przykład powyżej, ma parametry ścieżki , określone przez klamki w odniesieniu API. Parametry ścieżki są po prostu zmienne, które wpisujesz przed wysłaniem prośby i są prawie zawsze ID: ID użytkownika, grup ID, miejsce ID, itp. ID są często liczbowe, ale nie zawsze; na przykład, przechowywanie danych i pamięci przechowywania ID

Niektóre zasoby mają wiele wzorów ścieżki, widocznych pod 頭路 ścieżki zasobów w nagłówku API. Na przykład, URL dla Ograniczeń listy użytkownika może być jednym z obserwuje:

  • https://apis.roblox.com/cloud/cloud/v2/universes/{universe-id}/user-restrictions
  • https://apis.roblox.com/cloud/cloud/v2/universes/{universe-id}/places/{place-id}/user-restrictions

Prawdopodobnie można zaryzykować różnicę między dwoma: niektóre ograniczenia użytkowników mają zastosowanie do całego wszechświata (doświadczenia), podczas gdy inne mają zastosowanie do konkretnych miejsc w wszechświecie. Oprócz niewielkiej dodatkowej do parametru ścieżki i dodatkowej ścieżki, wezwania są identyczne.

Wiele API w zwrocie drogi jako część swojej odpowiedzi, którą możesz użyć do złożenia dalszych wniosków. Jeśli API potrzebuje więcej niż kilku sekund na zakończenie prośba, zwykle w zwrocie pojawia się operacja zamiast zasobu lub odpowiedzi.

Długość i typ treści

Wiele wezwów API, w szczególności tych, które tworzą lub aktualizują zasoby, wymaga ciała prośby JSON. Jeśli Twoje zgłoszenie ma ciało, upewnij się, że zawiera Content-Length i Content-Type nagłówki. Większość klientów HTTP dodaje te nagłówki automatycznie.

Pagination

Jeśli określisz maxPageSize w swoim prośba, niektóre metody zwracają wyniki podzielone na strony — w zasadzie częściowe odpowiedzi:


GET /cloud/v2/users/{userId}/inventory-items?maxPageSize=25
{
"inventoryItems": [
...
],
"nextPageToken": "aaaBBB"
}

Jeśli odpowiedź zawiera wartość dla nextPageToken , użyj tej wartości w parametrze pageToken następnego zapytania, aby odzyskać następną stronę. Gdy nextPageToken jest pusty, osiągnąłeś końcę wyników:


GET /cloud/v2/users/{userId}/inventory-items?maxPageSize=25&pageToken=aaaBBB
{
"inventoryItems": [
...
],
"nextPageToken": ""
}

Oprócz pageToken , musisz użyć tej samej zapytania, aby prawidłowo działała pagination. Altering any filter parameter results in a 400 error.

Długoterminowe operacje

Niektóre metody zwracają obiekt Operation, który reprezentuje długoterminowe zadanie, które zwraca asynchroniczną odpowiedź później. Obiekt zawiera następujące pola:

  • droga - Droga końcowa do wezwania do głosowania na ukończenie prośba. Załóż drogę do oryginalnej bazy URL metody zasobu.
  • zakończony -wartośćBoolean, która określa, czy operacja została zakończona lub nie.
  • odpowiedź - Obiekt odpowiedzi. To pole jest puste do czasu, aż pola done i true mają wartość 0> true0>.
  • metadane meta - Dostosowane metadane do wymaganej prośby.
Przykład obiektu operacji

{
"path": "v1/assets/12345/operation/xyz",
"done": true,
"response": {
"value1": "myValue",
"value2": 1234
},
"metadata": {
"metadata1": "string",
"metadata2": 5678
}
}

Użyj ścieżki Operation obiektu, aby zagłosować, kiedy zasób jest gotowy. Dobrym strategią jest używanie eksponencjalnego odchylenia. Na przykład możesz zagłosować natychmiastnie, a potem po jednej sekundzie, dwóch sekundach, czterech sekundach itp.


def PollForResults(operationPath):
currentRetries = 0
maxRetries = 10
retryPollingDelay = 1
retryPollingMultiplier = 2
while (currentRetries < maxRetries):
# Brak opóźnienia przy pierwszej sprawdzać
if (currentRetries == 0):
results = GetOperation(operationPath)
# Odczytaj ponownie logikę dla kolejnych czynności
else:
time.sleep(retryPollingDelay)
results = GetOperation(operationPath)
# Wyłącz
retryPollingDelay *= retryPollingMultiplier
# Sprawdź wyniki i powróć, jeśli istnieją
if (results.status_code != 200 or results.json()[doneJSONKey]):
return results
# W przeciwnym razie zwiększ liczbę prób
else:
currentRetries += 1

Dla bardziej kompletnego przykładu kodu, który używa stałego interwału prób lub zwrotów, zobacz Polling for Results .

Filtrowanie

Niektóre metody pozwalają na filtrowanie odpowiedzi poprzez uwzględnienie parametru filter w prośba. Następne sekcje opisują szybkę filtrowania i zasady dla określonych punktów końcowych.

Lista członkowstw grup

Dziką kartę można użyć w miejsce ID grupy, aby uzyskać listę członkowstw w wszystkich grupach: - .

Filtrowanie zgodne z CommonExpressionLanguage (CEL). Wspierane są tylko dwa operatory:

  • ==
  • in [...]

Jeśli określisz ID grupy w ścieżce zasobu, możesz filtrować członkostwo według użytkownika lub roli w następujących formatach:

  • Filtr użytkownika : filter="user == 'users/9876543210'"
  • Filtr roli : filter="role == 'groups/123/roles/7920705'"

Jeśli określisz dzikiego znaku dla ID grupy, musisz filtrować członkowstwo przez użytkownika (do 50) w następującej formie:

  • Filtr użytkownika : filter="użytkownik w [usern/1, użytkownikach/156, użytkownikach/9876543210], itp] [...]

Lista przedmiotów w ekwipunku

Możesz filtrować według statusu zbieralności, wpisywaćprzedmiotu w ekwipunku i ID ekwipunku. Jeśli nie zapewnisz filtra, cały ekwipunek użytkownika zostanie zwrócony.

格式k filtra to lista rozdzielona semikolonami:

filter={field}={value};{field}={value},{value},...;{field}=...

  • {field} może być dowolnym z wcześniej zdefiniowanych pola typu lub pola ID w następujących tabelach.
  • {value} może być ciągiem, bułką lub listą. W zależności od wpisywaćpola może to być pojedyncza wartość (bułki pola) lub wieloroczny wątek (listy pola).

Typy pola

| Filtr | Typ | Opis | | :---------------- | : | | | Filter | Type | Description | | :---------------- | : | | | In

Pole ID

| Filtruj | Rodzaj | Opis | | :----------------- | :----- | :

Przykłady

  • Zwraca wszystkie zbieralne przedmioty, które posiada użytkownik:

    filter=onlyCollectibles=true;inventoryItemAssetTypes=*

  • Zwraca wszystkie pozycje typów określonych:

    filter=inventoryItemAssetTypes=HAT,CLASSIC_PANTS,TSHIRT_ACCESSORY

  • Wyświetla wszystkie pozycje z listy typów lub dowolne przepustki do gry. Wyklucza odznaki z wyników (to samo zachowanie, jakby badges nie było włączone w filtr):

    filter=inventoryItemAssetTypes=HAT,CLASSIC_PANTS,TSHIRT_ACCESSORY;gamePasses=true;badges=false

  • Restituje zasoby, które odpowiadają podanym ID:

    filter=assetIds=1,2,3,4

  • Zwraca zasoby, odznaki, przepustki do gry i prywatne serwery, które odpowiadają podanym ID:

    filter=assetIds=1,2,3,4;badgeIds=1,2,3,4;gamePassIds=1,2,3,4;privateServerIds=1,2,3,4