ریکوسٹ اور ریسپانس کا گہرا جائزہ

ہر HTTP سرور ایک مخصوص سائیکل پر عمل کرتا ہے۔ یہ ایک کنکشن قبول کرتا ہے، ریکوسٹ کو پارس کرتا ہے، روٹ سے میچ کرتا ہے، اور ریسپانس بھیجتا ہے۔

Hyperlane اس عمل کو آسان بناتا ہے۔ آپ ڈائریکٹ میتھڈ کالز یا سادہ ایٹریبیوٹ میکروز (attribute macros) کا استعمال کرتے ہوئے اس سائیکل کو مینیج کر سکتے ہیں۔

Hyperlane ریکوسٹ لائف سائیکل کو کیسے ہینڈل کرتا ہے:

  • سرور ایک TCP کنکشن قبول کرتا ہے۔
  • یہ اسٹریم کو Request آبجیکٹ میں پارس کرتا ہے۔
  • Request مڈل ویئر ڈیٹا کو پروسیس کرتا ہے۔
  • سرور ریکوسٹ کو ایک روٹ سے میچ کرتا ہے۔
  • روٹ ہینڈلر ایگزیکیوٹ ہوتا ہے۔
  • Response مڈل ویئر چلتا ہے۔
  • ریسپانس کلائنٹ کو واپس بھیج دیا جاتا ہے۔

ریکوسٹ ڈیٹا تک رسائی: آپ ریکوسٹ سے ڈیٹا نکالنے کے لیے Context آبجیکٹ کا استعمال کر سکتے ہیں۔ • get_method() HTTP میتھڈ کے لیے۔ • get_path() URL پاتھ کے لیے۔ • get_headers() تمام ہیڈرز کے لیے۔ • get_body_json() JSON باڈیز کو پارس کرنے کے لیے۔ • try_get_query() مخصوص پیرامیٹرز تلاش کرنے کے لیے۔

Hyperlane ڈیٹا کے اخراج (extraction) کو خودکار بنانے کے لیے ایٹریبیوٹ میکروز کا بھی استعمال کرتا ہے۔ مینوئل کوڈ لکھنے کے بجائے، آپ ان ٹیگز کا استعمال کر سکتے ہیں:

  • #[request_body_json] JSON کو فوری طور پر پارس کرنے کے لیے۔
  • #[request_query] URL پیرامیٹرز حاصل کرنے کے لیے۔
  • #[request_header] مخصوص ہیڈرز نکالنے کے لیے۔

روٹ مینجمنٹ اور فلٹرنگ: آپ {param} سنٹیکس کا استعمال کرتے ہوئے ڈائنامک روٹس ڈیفائن کر سکتے ہیں۔ مثال کے طور پر: "/test/{text}"۔ Hyperlane آپ کو روٹ کی سطح پر ریکوسٹس کو فلٹر کرنے کی اجازت بھی دیتا ہے۔ آپ یہ کر سکتے ہیں:

  • #[host] کے ذریعے مخصوص ہوسٹس کو میچ کرنا۔
  • #[reject_referer] کے ذریعے مخصوص ریفررز کو مسترد کرنا۔
  • #[filter] کے ذریعے کسٹم لاجک لاگو کرنا۔

ریسپانسز اور کوکیز کا انتظام: آپ Context آبجیکٹ کے ذریعے ریسپانس کو کنٹرول کر سکتے ہیں۔ آپ اسٹیٹس کوڈز، ہیڈرز اور باڈیز کو مینوئل طور پر سیٹ کر سکتے ہیں۔ اسے آسان بنانے کے لیے، ریسپانس میکروز کا استعمال کریں:

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

سیشن مینجمنٹ کے لیے، CookieBuilder کا استعمال کریں۔ یہ آپ کو ایک صاف ستھرے سنٹیکس کے ساتھ ایکسپائریشن ڈیٹ، ڈومینز، اور HttpOnly یا Secure جیسے سیکیورٹی فلیگز سیٹ کرنے کی اجازت دیتا ہے۔

جب آپ کا ریسپانس تیار ہو جائے، تو آپ build() اور try_send() جیسے میتھڈز کا استعمال کرتے ہوئے اسے اسٹریم کے ذریعے بھیج دیتے ہیں۔

Hyperlane آپ کو کام کرنے کے دو طریقے دیتا ہے۔ جب آپ کو واضح کنٹرول کی ضرورت ہو تو میتھڈ کالز کا استعمال کریں۔ جب آپ صاف ستھرا اور تیز کوڈ چاہتے ہوں تو ایٹریبیوٹ میکروز کا استعمال کریں۔

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

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