JSON과 HTTP 통신

개요

HttpService를 사용하면 외부 Http 서버와 통신할 수 있습니다. 외부 API 서버에서 데이터를 가져와 월드에 활용하거나, 데이터를 외부 API 서버로 보낸 후 응답받은 데이터를 월드에 활용할 수 있습니다.

사용 방법

기능
설명

GetAsync(url)

url의 응답 받기

PostAsync(url, data)

url로 data를 보내고 응답 받기

JSONEncode(tableData)

table 형식의 tableData를 JSON string 형태로 변환 및 반환

JSONDecode(json)

JSON 형식의 JSON을 table 형태로 변환 및 반환

URL에서 응답 받기

baseUrl 변수에 입력된 url 링크에 HTTP GET 요청을 보내고 응답을 받아 response 변수에 저장하고 print하는 예시 코드입니다.

-- HttpService 불러오기
local HttpService = game:GetService("HttpService")
local baseUrl = "HTTP URL을 입력하세요"

local success, errorMessageOrResult, response = nil, nil, nil

local function HttpGet()
    -- 비동기 요청이 실패하거나 오류가 발생할 수 있으므로 pcall()로 예외 처리
    success, errorMessageOrResult = pcall(function()
        -- "baseUrl" 주소로 HTTP GET 요청을 보낸 후 받은 응답을 "response" 변수에 저장
        response = HttpService:GetAsync(baseUrl)
    end)
    
    local messageSuccess = string.format("success: %s", success)
    local messageErrorOrResult = string.format("errorMessageOrResult: %s", errorMessageOrResult)
    local messageResponse = string.format("response: %s", response)
    
    print("messageSuccess: ", messageSuccess)
    print("messageErrorOrResult: ", messageErrorOrResult)
    print("messageResponse: ", messageResponse)
end

URL에 JSON 데이터 보내고 응답 받기

baseUrl 변수에 입력된 url 링크에 월드에서 사용하던 table 데이터를 JSON으로 인코딩하여 HTTP POST 요청을 보내고 응답을 받아 response 변수에 저장하고 print하는 예시 코드입니다.

-- HttpService 불러오기
local HttpService = game:GetService("HttpService")
local baseUrl = "HTTP URL을 입력하세요"

local success, errorMessageOrResult, response = nil, nil, nil

local function HttpPost()
    -- URL로 보낼 데이터 정의
    local data = 
    {
        ["message"] = "Hello OVERDARE!",
        ["data"] = 10,
    }

    -- data를 JSON으로 인코딩
    local jsonData = HttpService:JSONEncode(data)

    -- 비동기 요청이 실패하거나 오류가 발생할 수 있으므로 pcall()로 예외 처리
    success, errorMessageOrResult = pcall(function()
        -- "baseUrl" 주소로 "jsonData" 데이터와 함께 HTTP POST 요청을 보낸 후 받은 응답을 "response" 변수에 저장
        response = HttpService:PostAsync(baseUrl, jsonData)
    end)

    local messageSuccess = string.format("success: %s", success)
    local messageErrorOrResult = string.format("errorMessageOrResult: %s", errorMessageOrResult)
    local messageResponse = string.format("response: %s", response)
    
    print("messageSuccess: ", messageSuccess)
    print("messageErrorOrResult: ", messageErrorOrResult)
    print("messageResponse: ", messageResponse)
end

URL에서 응답 받은 JSON 데이터 활용하기

baseUrl 변수에 입력된 url 링크에 HTTP GET 요청을 보내고 응답을 받아 response 변수에 저장하고 응답받은 데이터가 JSON이라는 가정 하에 table로 Decoding한 후 print하는 예시 코드입니다.

-- HttpService 불러오기
local HttpService = game:GetService("HttpService")
local baseUrl = "HTTP URL을 입력하세요"

local success, errorMessageOrResult, response = nil, nil, nil

local function HttpGetApplication()
    -- 비동기 요청이 실패하거나 오류가 발생할 수 있으므로 pcall()로 예외 처리
    success, errorMessageOrResult = pcall(function()
        -- "baseUrl" 주소로 HTTP GET 요청을 보낸 후 받은응답을 "response" 변수에 저장
        response = HttpService:GetAsync(baseUrl)
        -- JSON 문자열을 디코딩하여 table 형식으로 "response" 변수에 저장
        response = HttpService:JSONDecode(response)
    end)

    local messageSuccess = string.format("success: %s", success)
    local messageErrorOrResult = string.format("errorMessageOrResult: %s", errorMessageOrResult)
    local messageResponse = string.format("response.data: %s", response.data)
    
    print("messageSuccess: ", messageSuccess)
    print("messageErrorOrResult: ", messageErrorOrResult)
    print("messageResponse: ", messageResponse)
end

주의사항

사용하시는 API 주소 마다 분당 요청 수 등의 제한이 있을 수 있습니다. 원하는 기능 구현에 있어 반드시 해당 API 주소의 요청 수를 확인하시기 바랍니다.

Last updated