Skip to main content

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

ParameterTypeRequiredDescription
storage_keysstringRequiredList of data to query (JSON string)

storage_keys JSON Structure (MultiLoadParam)

FieldTypeRequiredDescription
ItemsMultiLoadParamValue[]RequiredList of data to query

MultiLoadParamValue Structure

FieldTypeRequiredDescription
PlayerIdstringRequiredPlayer ID to query
StorageKeystringRequiredKey of the data to load

Response Data

FieldTypeDescription
ItemsarrayList of loaded data

Items Array Elements

FieldTypeDescription
PlayerIdstringPlayer ID
StorageKeystringKey of the data
StorageValuestringValue 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.