Response
Объект Response содержит результат HTTP-запроса, выполненного с помощью модуля Request. Он предоставляет доступ к данным ответа, коду состояния и другим метаданным, возвращаемым сервером.
Обзор
Объекты Response возвращаются методами HTTP-запросов, такими как get(), post(), put(), patch() и delete(). Они инкапсулируют ответ сервера и предоставляют методы для доступа к содержимому и метаданным ответа.
Методы
getData(): string
Возвращает содержимое тела ответа в виде строки.
Возвращаемое значение
string — содержимое тела ответа
getResponseCode(): number
Возвращает код состояния HTTP из ответа.
Возвращаемое значение
number — код состояния HTTP (например, 200, 404, 500)
Стандартный шаблон использования
-- Make a request and handle the response
local response = Request("https://api.example.com/data"):get()
-- Get the status code to check if the request was successful
local statusCode = response:getResponseCode()
if statusCode == 200 then
-- Request was successful, get the data
local data = response:getData()
print("Response data: " .. data)
else
-- Request failed, handle the error
print("Request failed with status: " .. statusCode)
local errorData = response:getData()
if errorData and errorData ~= "" then
print("Error details: " .. errorData)
end
end
Категории кодов состояния HTTP
| Диапазон | Значение | Типичный ответ |
|---|---|---|
| 200-299 | Успех | Содержит запрошенные данные или подтверждение |
| 300-399 | Перенаправление | Обычно пусто или содержит информацию о перенаправлении |
| 400-499 | Ошибка клиента | Содержит описание ошибки |
| 500-599 | Ошибка сервера | Содержит описание ошибки |
Форматы данных ответа
Данные ответа всегда возвращаются в виде строки, независимо от исходного формата:
- JSON:
"{\"key\":\"value\"}"— может потребовать анализа, если у вас есть парсер JSON - XML:
"<?xml version=\"1.0\"?><root>...</root>"— XML-содержимое в виде строки - Простой текст:
"Simple text response"— прямое текстовое содержимое - HTML:
"<html><body>...</body></html>"— HTML-содержимое в виде строки - Пусто:
""— нет содержимого (часто бывает с ответами 204)
Рекомендации
- Всегда сначала проверяйте код состояния перед обработкой данных ответа
- Корректно обрабатывайте пустые ответы, особенно с кодами состояния 204
- Проверяйте содержимое ответа даже для ответов с ошибками, так как они могут содержать полезную информацию
- Будьте готовы к сетевым ошибкам, которые могут помешать созданию объекта ответа
Примеры
Базовая обработка ответа
local response = Request("https://api.example.com/users/123"):get()
local status = response:getResponseCode()
if status == 200 then
local userData = response:getData()
print("User data: " .. userData)
else
print("Failed to get user data. Status: " .. status)
end
Обработка ошибок
local response = Request("https://api.example.com/invalid"):get()
local status = response:getResponseCode()
if status == 404 then
print("Resource not found")
elseif status == 401 then
print("Authentication required")
elseif status >= 500 then
print("Server error: " .. status)
local errorDetails = response:getData()
print("Error details: " .. errorDetails)
else
print("Unexpected status code: " .. status)
end
Работа с различными HTTP-методами
-- GET request
local getResponse = Request("https://api.example.com/data"):get()
print("GET status: " .. getResponse:getResponseCode())
-- POST request
local postResponse = Request("https://api.example.com/data")
:setParameter("key", "value")
:post()
print("POST status: " .. postResponse:getResponseCode())
-- DELETE request
local deleteResponse = Request("https://api.example.com/data/123"):delete()
print("DELETE status: " .. deleteResponse:getResponseCode())