๐ ์ธ๋ฆฌ์ผ ์์ง์์ Http ์์ฒญ์ผ๋ก ํต์ ํด๋ณด์.
๋ฐฑ์๋ ์๋ฒ๋ฅผ ๊ตฌ์ถํ์ฌ API ํต์ ์ ํ ์ ์๋ ํ๋ก์ ํธ๋ฅผ ํด๋ณด๊ณ ์ถ์ด์ก์ต๋๋ค.
๊ทธ๋์ ์ธ๋ฆฌ์ผ ์์ง์์ Http ์์ฒญ์ ๋ณด๋ด๊ณ ๊ฐ์ ๋ฐ์
JSON์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ฆฌ์ฆ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ด๋ฒ ์ค์ต์์ ์ฌ์ฉํ ํ
์คํธ URL์
๋๋ค.
https://jsonplaceholder.typicode.com/posts/1
์๋์ ๊ฐ์ ํ์์ ๊ฐ์ง๋๊ฑธ ์ฐธ๊ณ ํด์ฃผ์ธ์.
Response {
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
Json ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์์กด์ฑ์ ์ด๋ฏธ HTTP์ ๊ฐ์ด ์ถ๊ฐ ํ์์ต๋๋ค.
Json.h
ํค๋๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์.
์ด๊ฑฐ๋ง ํ๋ฉด ํค๋ ํ์ผ์ ์์ ํ ๊ฒ ์์ต๋๋ค.
#include "Json.h"
์ฐ๋ฆฌ๋ ์๋ต๋ฐ์ Response๋ฅผ ํ์ฑํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด OnResponseReceived
์ฝ๋ฐฑ ํจ์์์ Json์ ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋๊ฒ ์ฃ ?
์์ธ์ฒ๋ฆฌ ๋ถ๋ถ ๋ค๋ถํฐ ์ฝ๋๋ฅผ ์์ ํด๋ด ์๋ค.
FJsonObject
ํ์
์ ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ฒ ์ต๋๋ค.
์ด๋ Json ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฒ ๋ ๊ฐ์ฒด์ ๋๋ค.
// Json ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ฐ์ฒด
TSharedPtr<FJsonObject> RefObj;
์ด์ Json์ผ๋ก ๋ณํํ๊ธฐ ์ํ ๋ฆฌ๋ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
์ด ๊ฐ์ฒด๋ JSON ๋ฌธ์์ด์ ์
๋ ฅ๋ฐ์ ์ฝ๋ ์์
์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ฌธ์์ด์ FJsonObject์ ๊ฐ์ Unreal ์์ง์ ๊ตฌ์กฐ์ฒด๋ก ๋ณํํ ์ ์๋๋ก ๋์์ค๋๋ค.
// Json ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๊ธฐ ์ํ ๋ฆฌ๋ ๊ฐ์ฒด
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(Response->GetContentAsString());
Deserialize
๋ ์ญ์ง๋ ฌํ๋ฅผ ์ํํ๋ ํจ์์
๋๋ค.
// Reader๋ฅผ ์ฌ์ฉํด ๋ฌธ์์ด์ ํ์ฑํ๊ณ , ์ด๋ฅผ FJsonObject๋ก ๋ณํํ๋ค.
FJsonSerializer::Deserialize(Reader, RefObj);
์ ์ฒด ์ฝ๋์ ๋๋ค.
void AGM_API_Test::OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
// ์์ธ์ฒ๋ฆฌ๋ฌธ
// Json ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ฐ์ฒด
TSharedPtr<FJsonObject> RefObj;
// Json ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ๊ธฐ ์ํ ๋ฆฌ๋ ๊ฐ์ฒด
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(Response->GetContentAsString());
// Reader๋ฅผ ์ฌ์ฉํด ๋ฌธ์์ด์ ํ์ฑํ๊ณ , ์ด๋ฅผ FJsonObject๋ก ๋ณํํ๋ค.
FJsonSerializer::Deserialize(Reader, RefObj);
// ์์ฒญ์ด ์๋ฃ๋์์์ ์ถ๋ ฅ
UE_LOG(LogTemp, Warning, TEXT("Response : %s"), *Response->GetContentAsString());
UE_LOG(LogTemp, Warning, TEXT("title : %s"), *RefObj->GetStringField("title"));
UE_LOG(LogTemp, Warning, TEXT("body : %s"), *RefObj->GetStringField("body"));
}
์คํํด๋ณด๋ฉด ๊ฐ ํ๋์ ๋ง๊ฒ ์ถ์ถ๋์ด ๊ฐ์ ์ถ๋ ฅํ๋ ๋ชจ์ต์
๋๋ค.
๊ฐ๋จํฉ๋๋ค.
์ง๊ธ์ ์์๋ก ๊ฐ ํค๋ฅผ ์ง์ ์
๋ ฅํ์์ต๋๋ค.
ํ์ง๋ง ์ง์ API๋ฅผ ์ค๊ณํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋๋ค๊ณ ํ๋ฉด ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ฉด ์ข ๋ ๊น๋ํ๊ฒ ์ ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋ค์ ํฌ์คํ ์๋ ์๋ฒ์๊ฒ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ ์ฃผ๋ ๋ฐฉ๋ฒ์ ์ค์ตํด๋ณด๊ฒ ์ต๋๋ค.