تحليل معمق للطلبات والاستجابات

يتبع كل خادم HTTP دورة محددة؛ حيث يقبل الاتصال، ويحلل الطلب، ويطابق المسار، ثم يرسل الاستجابة.

يجعل Hyperlane هذه العملية سهلة. يمكنك إدارة هذه الدورة باستخدام استدعاءات الدوال المباشرة أو وحدات الماكرو الخاصة بالسمات (attribute macros) البسيطة.

كيف يتعامل Hyperlane مع دورة حياة الطلب:

  • يقبل الخادم اتصال TCP.
  • يقوم بتحليل التدفق (stream) إلى كائن Request.
  • تقوم البرمجيات الوسيطة للطلب (Request middleware) بمعالجة البيانات.
  • يطابق الخادم الطلب مع مسار معين.
  • يتم تنفيذ معالج المسار (route handler).
  • تعمل البرمجيات الوسيطة للاستجابة (Response middleware).
  • تعود الاستجابة إلى العميل.

الوصول إلى بيانات الطلب: يمكنك استخدام كائن Context لسحب البيانات من الطلب. • get_method() للحصول على طريقة HTTP. • get_path() للحصول على مسار URL. • get_headers() للحصول على جميع الرؤوس (headers). • get_body_json() لتحليل أجسام JSON. • try_get_query() للعثور على معاملات (parameters) محددة.

يستخدم Hyperlane أيضًا وحدات الماكرو الخاصة بالسمات (attribute macros) لأتمتة استخراج البيانات. بدلاً من كتابة كود يدوي، يمكنك استخدام وسوم مثل:

  • #[request_body_json] لتحليل JSON فوراً.
  • #[request_query] لجلب معاملات URL.
  • #[request_header] لسحب رؤوس محددة.

إدارة المسارات والتصفية: يمكنك تعريف مسارات ديناميكية باستخدام صيغة {param}. على سبيل المثال: "/test/{text}". يتيح لك Hyperlane أيضًا تصفية الطلبات على مستوى المسار. يمكنك:

  • مطابقة مضيفين (hosts) محددين باستخدام #[host].
  • رفض مرجعين (referers) محددين باستخدام #[reject_referer].
  • تطبيق منطق مخصص باستخدام #[filter].

إدارة الاستجابات وملفات تعريف الارتباط (Cookies): يمكنك التحكم في الاستجابة من خلال كائن Context. يمكنك تعيين رموز الحالة (status codes)، والرؤوس، والأجسام يدويًا. لتبسيط ذلك، استخدم ماكرو الاستجابة:

  • #[response_status_code(200)]
  • #[response_body("Hello World")]

لإدارة الجلسات، استخدم CookieBuilder. فهو يتيح لك تعيين تواريخ انتهاء الصلاحية، والنطاقات (domains)، وأعلام الأمان مثل HttpOnly أو Secure بصيغة برمجية نظيفة.

بمجرد أن تصبح استجابتك جاهزة، يمكنك إرسالها عبر التدفق (stream) باستخدام دوال مثل build() و try_send().

يمنحك Hyperlane طريقتين للعمل. استخدم استدعاءات الدوال عندما تحتاج إلى تحكم صريح، واستخدم وحدات الماكرو الخاصة بالسمات عندما تريد كودًا نظيفًا وسريعًا.

Project Code: https://github.com/hyperlane-dev/hyperlane

Source: https://dev.to/tengxgfyrz67s/request-and-response-deep-dive-1j1b