Удобный module для отправки и получения HTTP запросов.

Hichimiro

Бесмертный
rbxdev
Администрация
16 Сен 2024
42
31
1 017



Модуль httpservice для работы с HTTP-запросами в Roblox​

Модуль httpservice создан для удобной работы с HTTP-запросами в Roblox. Он предоставляет функции для выполнения GET, POST, универсальных запросов, а также для кодирования и декодирования JSON. Этот модуль будет полезен при интеграции с внешними API или обмене данными между серверами.


Установка модуля​

  1. Создайте скрипт httpservice в папке ServerScriptService.
  2. Скопируйте код модуля в созданный файл.
  3. Подключайте модуль в других скриптах с помощью функции require.
Код:
local httpservice = {}
local service = game:GetService("HttpService")


function httpservice.asyncGet(url)
    assert(type(url) == "string", "URL должен быть строкой")
    local success, result = pcall(function()
        return service:GetAsync(url, true)
    end)
    if success then
        return result
    else
        error("Ошибка GET-запроса: " .. tostring(result))
    end
end

function httpservice.asyncPost(url, body, headers)
    assert(type(url) == "string", "URL должен быть строкой")
    assert(type(body) == "string" or type(body) == "table", "Тело запроса должно быть строкой или таблицей")
    headers = headers or {}
    if type(body) == "table" then
        body = service:JSONEncode(body)
    end
    local success, result = pcall(function()
        return service:PostAsync(url, body, Enum.HttpContentType.ApplicationJson, false, headers)
    end)
    if success then
        return result
    else
        error("Ошибка POST-запроса: " .. tostring(result))
    end
end


function httpservice.asyncRequest(url, method, body, headers)
    assert(type(url) == "string", "URL должен быть строкой")
    assert(type(method) == "string", "Метод должен быть строкой")
    headers = headers or {}
    body = body or ""

    if type(body) == "table" then
        body = service:JSONEncode(body)
    end

    local success, result = pcall(function()
        return service:RequestAsync({
            Url = url,
            Method = method:upper(),
            Headers = headers,
            Body = body
        })
    end)
    if success then
        return result
    else
        error("Ошибка HTTP-запроса: " .. tostring(result))
    end
end


function httpservice.decodeJson(jsonString)
    assert(type(jsonString) == "string", "Входные данные должны быть строкой JSON")
    local success, result = pcall(function()
        return service:JSONDecode(jsonString)
    end)
    if success then
        return result
    else
        error("Ошибка декодирования JSON: " .. tostring(result))
    end
end


function httpservice.encodeJson(data)
    assert(type(data) == "table", "Данные должны быть таблицей")
    local success, result = pcall(function()
        return service:JSONEncode(data)
    end)
    if success then
        return result
    else
        error("Ошибка кодирования JSON: " .. tostring(result))
    end
end

return httpservice

Пример:

lua
Копировать код
local httpservice = require(game.ServerScriptService.httpservice)


Функции модуля​

1. asyncGet(url: string): string​

Отправляет GET-запрос по указанному URL.

  • Параметры:
    • url (string): адрес, на который отправляется запрос.
  • Возвращает:
    • Ответ в виде строки (обычно это JSON).
  • Пример:

    Код:
    local response = httpservice.asyncGet("https://api.example.com/data")
    print(response)

2. asyncPost(url: string, body: string | table, headers: table?): string​

Отправляет POST-запрос по указанному URL с телом запроса.

  • Параметры:
    • url (string): адрес, на который отправляется запрос.
    • body (string или table): данные для отправки. Таблица будет автоматически преобразована в JSON.
    • headers (table, необязательный): дополнительные заголовки для запроса.
  • Возвращает:
    • Ответ в виде строки.
  • Пример:
    lua
    Копировать код
    local postData = { key = "value" }
    local response = httpservice.asyncPost("https://api.example.com/data", postData)
    print(response)

3. asyncRequest(url: string, method: string, body: string | table?, headers: table?): table​

Универсальная функция для отправки запросов с любым методом (GET, POST, PUT, DELETE и т. д.).

  • Параметры:
    • url (string): адрес, на который отправляется запрос.
    • method (string): метод запроса (GET, POST и т. д.).
    • body (string или table, необязательный): данные для отправки.
    • headers (table, необязательный): дополнительные заголовки.
  • Возвращает:
    • Таблицу с результатами запроса (включает код ответа, тело и заголовки).
  • Пример:

    Код:
    local response = httpservice.asyncRequest(
    "https://api.example.com/data",
    "PUT",
    { key = "newValue" },
    { Authorization = "Bearer token" }
    )
    print(response.StatusCode, response.Body)

4. decodeJson(jsonString: string): table​

Декодирует строку JSON в таблицу Lua.

  • Параметры:
    • jsonString (string): строка в формате JSON.
  • Возвращает:
    • Таблицу Lua.
  • Пример:
    lua
    Копировать код
    local decodedData = httpservice.decodeJson('{"key": "value"}')
    print(decodedData.key)

5. encodeJson(data: table): string​

Кодирует таблицу Lua в строку JSON.

  • Параметры:
    • data (table): таблица для кодирования.
  • Возвращает:
    • Строку JSON.
  • Пример:

    Код:
    local jsonData = httpservice.encodeJson({ newKey = "newValue" })
    print(jsonData)

Полный пример использования​

Код:
local httpservice = require(game.ServerScriptService.httpservice)

-- GET-запрос
local getResponse = httpservice.asyncGet("https://api.example.com/getData")
print("GET Response: ", getResponse)

-- POST-запрос с JSON-данными
local postData = { username = "Player", score = 123 }
local postResponse = httpservice.asyncPost("https://api.example.com/updateScore", postData)
print("POST Response: ", postResponse)

-- Универсальный запрос
local customResponse = httpservice.asyncRequest(
"https://api.example.com/modifyData",
"PATCH",
{ field = "value" },
{ Authorization = "Bearer token" }
)
print("Custom Request Response: ", customResponse.StatusCode, customResponse.Body)

-- Работа с JSON
local jsonString = '{"player": "John", "score": 250}'
local decoded = httpservice.decodeJson(jsonString)
print("Player Score: ", decoded.score)

local jsonData = httpservice.encodeJson({ level = "Beginner", points = 500 })
print("Encoded JSON: ", jsonData)


Советы по размещению модуля​

  1. Расположение: Поместите модуль httpservice.lua в ServerScriptService, чтобы обеспечить его безопасность и доступность только на сервере.
  2. Импорт: Используйте функцию require для подключения модуля в других скриптах.
  3. Защита данных: Убедитесь, что чувствительная информация (например, токены API) хранится безопасно и недоступна клиенту.

Возможные ошибки​

  • Ошибка декодирования JSON: Проверьте, что строка JSON валидна.
  • Ошибка сети: Убедитесь, что URL доступен и у вас включены HTTP-запросы в настройках Roblox Studio.
 
  • Лайк
Реакции: Nicon