내일배움캠프 83일차 TIL - 웹 통신

권태하·2024년 8월 14일
0
post-thumbnail
post-custom-banner

웹 통신에서

    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);
profile
스터디 로그
post-custom-banner

0개의 댓글