إنتقل إلى المحتوى الرئيسي

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)

أفضل الممارسات

  1. تحقق دائمًا من رمز الحالة أولًا قبل معالجة بيانات الاستجابة
  2. تعامل مع الاستجابات الفارغة بأناقة، خاصةً مع رموز الحالة 204
  3. تحقق من محتوى الاستجابة حتى في الاستجابات الخاطئة لأنها قد تحتوي على معلومات مفيدة
  4. كن مستعدًا لأخطاء الشبكة التي قد تمنع إنشاء كائن استجابة من الأساس

أمثلة

معالجة الاستجابة الأساسية

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())