웹 통신에서
IEnumerator GetAPI<T>(UnityAction<T> callback, string path)
{
UnityWebRequest www = UnityWebRequest.Get(path);
// 헤더 추가
www.SetRequestHeader("x-nxopen-api-key", apikey);
// 웹 요청이 올 때까지 대기
yield return www.SendWebRequest();
// 결과 들어오는 곳 www.downloadHandler.text
string result = www.downloadHandler.text;
Debug.Log(result);
T data = JsonUtility.FromJson<T>(result);
callback?.Invoke(data);
}
위 코루틴을 통해 정보를 주고받았는데, 넘겨줘야 할 매개변수가 늘어난다면 어떻게 해야할까?
Dictionary<string, string> 타입의 매개변수를 추가하려 쿼리 파라미터를 동적 생성할 수 있다고 한다.
IEnumerator GetAPI<T>(UnityAction<T> callback, string path, Dictionary<string, string> queryParams = null)
{
// 쿼리 파라미터가 있을 경우 URL에 추가
if (queryParams != null && queryParams.Count > 0)
{
path += "?";
foreach (var param in queryParams)
{
path += $"{UnityWebRequest.EscapeURL(param.Key)}={UnityWebRequest.EscapeURL(param.Value)}&";
}
path = path.TrimEnd('&');
}
UnityWebRequest www = UnityWebRequest.Get(path);
// 헤더 추가
www.SetRequestHeader("x-nxopen-api-key", apikey);
// 웹 요청이 올 때까지 대기
yield return www.SendWebRequest();
// 결과 들어오는 곳 www.downloadHandler.text
string result = www.downloadHandler.text;
Debug.Log(result);
T data = JsonUtility.FromJson<T>(result);
callback?.Invoke(data);
}
public void Request<T>(UnityAction<T> callback, string path, Dictionary<string, string> queryParams = null)
{
StartCoroutine(GetAPI<T>(callback, url + path, queryParams));
}
ex)
Dictionary<string, string> queryParams = new Dictionary<string, string>
{
{ "param1", "value1" },
{ "param2", "value2" }
};
NetworkManager.instance.Request<MyDataType>(MyCallback, "api/path", queryParams);