Модуль httpservice для работы с HTTP-запросами в Roblox
Модуль httpservice создан для удобной работы с HTTP-запросами в Roblox. Он предоставляет функции для выполнения GET, POST, универсальных запросов, а также для кодирования и декодирования JSON. Этот модуль будет полезен при интеграции с внешними API или обмене данными между серверами.Установка модуля
- Создайте скрипт httpservice в папке ServerScriptService.
- Скопируйте код модуля в созданный файл.
- Подключайте модуль в других скриптах с помощью функции 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)
Советы по размещению модуля
- Расположение: Поместите модуль httpservice.lua в ServerScriptService, чтобы обеспечить его безопасность и доступность только на сервере.
- Импорт: Используйте функцию require для подключения модуля в других скриптах.
- Защита данных: Убедитесь, что чувствительная информация (например, токены API) хранится безопасно и недоступна клиенту.
Возможные ошибки
- Ошибка декодирования JSON: Проверьте, что строка JSON валидна.
- Ошибка сети: Убедитесь, что URL доступен и у вас включены HTTP-запросы в настройках Roblox Studio.