Multi Player Data Load
Load multiple public data from other players at once.
URL Verification
This API uses the service-storage-api.playnanoo.com domain.
API Information
- URL:
https://service-storage-api.playnanoo.com/storage/v20221001/playerDataLoad/multi - Method:
PUT - Authentication Required: Yes
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| storage_keys | string | Required | List of data to query (JSON string) |
storage_keys JSON Structure (MultiLoadParam)
| Field | Type | Required | Description |
|---|---|---|---|
| Items | MultiLoadParamValue[] | Required | List of data to query |
MultiLoadParamValue Structure
| Field | Type | Required | Description |
|---|---|---|---|
| PlayerId | string | Required | Player ID to query |
| StorageKey | string | Required | Key of the data to load |
Response Data
| Field | Type | Description |
|---|---|---|
| Items | array | List of loaded data |
Items Array Elements
| Field | Type | Description |
|---|---|---|
| PlayerId | string | Player ID |
| StorageKey | string | Key of the data |
| StorageValue | string | Value of the data |
Code Example
// MultiLoadParamValue 구조체
struct FMultiLoadParamValue
{
FString PlayerId;
FString StorageKey;
TSharedPtr<FJsonObject> ToJsonObject() const
{
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());
JsonObject->SetStringField(TEXT("PlayerId"), PlayerId);
JsonObject->SetStringField(TEXT("StorageKey"), StorageKey);
return JsonObject;
}
};
void UMyGame::LoadMultiPlayerData(const TArray<FMultiLoadParamValue>& Items)
{
// Items 배열을 JSON으로 변환
TArray<TSharedPtr<FJsonValue>> ItemsArray;
for (const FMultiLoadParamValue& Item : Items)
{
ItemsArray.Add(MakeShareable(new FJsonValueObject(Item.ToJsonObject())));
}
// storage_keys용 JSON 객체 생성 (MultiLoadParam)
TSharedPtr<FJsonObject> StorageKeysObj = MakeShareable(new FJsonObject());
StorageKeysObj->SetArrayField(TEXT("Items"), ItemsArray);
// storage_keys를 JSON 문자열로 변환
FString StorageKeysJson;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&StorageKeysJson);
FJsonSerializer::Serialize(StorageKeysObj.ToSharedRef(), Writer);
// 플레이어 정보가 포함된 요청 바디 생성
TSharedPtr<FJsonObject> Body = FPlayNANOOHelper::CreateRequestBody();
Body->SetStringField(TEXT("storage_keys"), StorageKeysJson);
// JSON 문자열 변환
FString JsonBody = FPlayNANOOHelper::ToJsonString(Body);
// HTTP 요청
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
Request->SetURL(TEXT("https://service-storage-api.playnanoo.com/storage/v20221001/playerDataLoad/multi"));
Request->SetVerb(TEXT("PUT"));
FPlayNANOOHelper::SetCommonHeaders(Request, true); // 인증 토큰 포함
Request->SetContentAsString(JsonBody);
Request->OnProcessRequestComplete().BindLambda(
[](FHttpRequestPtr Req, FHttpResponsePtr Res, bool bSuccess)
{
if (bSuccess && Res.IsValid())
{
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(Res->GetContentAsString());
if (FJsonSerializer::Deserialize(Reader, JsonObject))
{
const TArray<TSharedPtr<FJsonValue>>* Items;
if (JsonObject->TryGetArrayField(TEXT("Items"), Items))
{
for (const auto& Item : *Items)
{
TSharedPtr<FJsonObject> ItemObj = Item->AsObject();
FString PlayerId = ItemObj->GetStringField(TEXT("PlayerId"));
FString Key = ItemObj->GetStringField(TEXT("StorageKey"));
FString Value = ItemObj->GetStringField(TEXT("StorageValue"));
UE_LOG(LogTemp, Log, TEXT("플레이어 %s: %s = %s"), *PlayerId, *Key, *Value);
}
}
}
}
});
Request->ProcessRequest();
}
Usage Example
void UMyGame::Example()
{
// 조회할 플레이어와 데이터 목록 생성
TArray<FMultiLoadParamValue> Items;
Items.Add({TEXT("PLAYER_ID_1"), TEXT("public_profile")});
Items.Add({TEXT("PLAYER_ID_2"), TEXT("ranking_info")});
Items.Add({TEXT("PLAYER_ID_1"), TEXT("achievement_list")});
// API 호출
LoadMultiPlayerData(Items);
}
Efficient Querying
When querying multiple public data from other players, using this API can reduce the number of network requests.
Security Notice
Since this API queries data from other players, only data that is safe to be public should be stored.