𝗥𝗲𝗤𝗨𝗘𝗦𝗧 𝗔𝗡𝗗 𝗥𝗘𝗦𝗣𝗢𝗡𝗦𝗘 𝗗𝗘𝗘𝗣 𝗗𝗜𝗩𝗘

ਹਰ HTTP ਸਰਵਰ ਇੱਕ ਖਾਸ ਚੱਕਰ (cycle) ਦੀ ਪਾਲਣਾ ਕਰਦਾ ਹੈ। ਇਹ ਇੱਕ ਕਨੈਕਸ਼ਨ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ, ਰਿਕਵੈਸਟ ਨੂੰ ਪਾਰਸ ਕਰਦਾ ਹੈ, ਰੂਟ ਨਾਲ ਮਿਲਾਉਂਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਰਿਸਪਾਂਸ ਭੇਜਦਾ ਹੈ।

Hyperlane ਇਸ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਆਸਾਨ ਬਣਾਉਂਦਾ ਹੈ। ਤੁਸੀਂ ਸਿੱਧੇ ਮੈਥਡ ਕਾਲ (method calls) ਜਾਂ ਸਧਾਰਨ ਐਟਰੀਬਿਊਟ ਮੈਕਰੋਜ਼ (attribute macros) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਸ ਚੱਕਰ ਨੂੰ ਪ੍ਰਬੰਧਿਤ ਕਰ ਸਕਦੇ ਹੋ।

Hyperlane ਰਿਕਵੈਸਟ ਲਾਈਫਸਾਈਕਲ (lifecycle) ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਦਾ ਹੈ:

  • ਸਰਵਰ ਇੱਕ TCP ਕਨੈਕਸ਼ਨ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ।
  • ਇਹ ਸਟ੍ਰੀਮ ਨੂੰ ਇੱਕ Request ਆਬਜੈਕਟ ਵਿੱਚ ਪਾਰਸ ਕਰਦਾ ਹੈ।
  • Request middleware ਡੇਟਾ ਨੂੰ ਪ੍ਰੋਸੈਸ ਕਰਦਾ ਹੈ।
  • ਸਰਵਰ ਰਿਕਵੈਸਟ ਨੂੰ ਇੱਕ ਰੂਟ ਨਾਲ ਮਿਲਾਉਂਦਾ ਹੈ।
  • ਰੂਟ ਹੈਂਡਲਰ (route handler) ਚੱਲਦਾ ਹੈ।
  • Response middleware ਚੱਲਦਾ ਹੈ।
  • ਰਿਸਪਾਂਸ ਕਲਾਇੰਟ ਕੋਲ ਵਾਪਸ ਜਾਂਦਾ ਹੈ।

ਰਿਕਵੈਸਟ ਡੇਟਾ ਤੱਕ ਪਹੁੰਚਣਾ: ਤੁਸੀਂ ਰਿਕਵੈਸਟ ਤੋਂ ਡੇਟਾ ਕੱਢਣ ਲਈ Context ਆਬਜੈਕਟ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ। • HTTP ਮੈਥਡ ਲਈ get_method()। • URL ਪਾਥ ਲਈ get_path()। • ਸਾਰੇ ਹੈਡਰਜ਼ ਲਈ get_headers()। • JSON ਬਾਡੀਜ਼ ਨੂੰ ਪਾਰਸ ਕਰਨ ਲਈ get_body_json()। • ਖਾਸ ਪੈਰਾਮੀਟਰਾਂ ਨੂੰ ਲੱਭਣ ਲਈ try_get_query()

Hyperlane ਡੇਟਾ ਐਕਸਟਰੈਕਸ਼ਨ ਨੂੰ ਆਟੋਮੇਟ ਕਰਨ ਲਈ ਐਟਰੀਬਿਊਟ ਮੈਕਰੋਜ਼ ਦੀ ਵਰਤੋਂ ਵੀ ਕਰਦਾ ਹੈ। ਮੈਨੂਅਲ ਕੋਡ ਲਿਖਣ ਦੀ ਬਜਾਏ, ਤੁਸੀਂ ਇਹਨਾਂ ਟੈਗਾਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ:

  • JSON ਨੂੰ ਤੁਰੰਤ ਪਾਰਸ ਕਰਨ ਲਈ #[request_body_json]
  • URL ਪੈਰਾਮੀਟਰਾਂ ਨੂੰ ਲੈਣ ਲਈ #[request_query]
  • ਖਾਸ ਹੈਡਰਜ਼ ਕੱਢਣ ਲਈ #[request_header]

ਰੂਟ ਪ੍ਰਬੰਧਨ ਅਤੇ ਫਿਲਟਰਿੰਗ: ਤੁਸੀਂ {param} ਸਿੰਟੈਕਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਡਾਇਨਾਮਿਕ ਰੂਟਸ (dynamic routes) ਪਰਿਭਾਸ਼ਿਤ ਕਰ ਸਕਦੇ ਹੋ। ਉਦਾਹਰਨ ਲਈ: "/test/{text"। Hyperlane ਤੁਹਾਨੂੰ ਰੂਟ ਪੱਧਰ 'ਤੇ ਰਿਕਵੈਸਟਾਂ ਨੂੰ ਫਿਲਟਰ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਵੀ ਦਿੰਦਾ ਹੈ। ਤੁਸੀਂ ਕਰ ਸਕਦੇ ਹੋ:

  • #[host] ਨਾਲ ਖਾਸ ਹੋਸਟਾਂ ਨੂੰ ਮਿਲਾਉਣਾ।
  • #[reject_referer] ਨਾਲ ਖਾਸ ਰੈਫਰਰਜ਼ (referers) ਨੂੰ ਰੱਦ ਕਰਨਾ।
  • #[filter] ਨਾਲ ਕਸਟਮ ਲੌਜਿਕ ਲਾਗੂ ਕਰਨਾ।

ਰਿਸਪਾਂਸ ਅਤੇ ਕੁਕੀਜ਼ ਦਾ ਪ੍ਰਬੰਧਨ: ਤੁਸੀਂ Context ਆਬਜੈਕਟ ਰਾਹੀਂ ਰਿਸਪਾਂਸ ਨੂੰ ਕੰਟਰੋਲ ਕਰਦੇ ਹੋ। ਤੁਸੀਂ ਸਟੇਟਸ ਕੋਡ, ਹੈਡਰਜ਼ ਅਤੇ ਬਾਡੀਜ਼ ਨੂੰ ਮੈਨੂਅਲੀ ਸੈੱਟ ਕਰ ਸਕਦੇ ਹੋ। ਇਸ ਨੂੰ ਸਰਲ ਬਣਾਉਣ ਲਈ, ਰਿਸਪਾਂਸ ਮੈਕਰੋਜ਼ ਦੀ ਵਰਤੋਂ ਕਰੋ:

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

ਸੈਸ਼ਨ ਪ੍ਰਬੰਧਨ (session management) ਲਈ, 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