צלילה לעומק של בקשות ותגובות
כל שרת HTTP פועל לפי מחזור ספציפי. הוא מקבל חיבור, מנתח בקשה, מתאים אותה לנתיב (route) ושולח תגובה.
Hyperlane הופכת את התהליך הזה לפשוט. ניתן לנהל את המחזור הזה באמצעות קריאות ישירות למתודות או באמצעות מאקרואים (macros) פשוטים של תכונות (attributes).
כיצד Hyperlane מנהלת את מחזור חיי הבקשה:
- השרת מקבל חיבור TCP.
- הוא מנתח את הזרם (stream) לאובייקט Request.
- Request middleware מעבד את הנתונים.
- השרת מתאים את הבקשה לנתיב (route).
- ה-route handler מבוצע.
- Response middleware פועל.
- התגובה נשלחת חזרה ללקוח (client).
גישה לנתוני בקשה:
ניתן להשתמש באובייקט Context כדי לשלוף נתונים מתוך בקשה.
• get_method() עבור מתודת ה-HTTP.
• get_path() עבור נתיב ה-URL.
• get_headers() עבור כל ה-headers.
• get_body_json() כדי לנתח גופי JSON.
• try_get_query() כדי למצוא פרמטרים ספציפיים.
Hyperlane משתמשת גם במאקרואים של תכונות (attribute macros) כדי לאוטומט את שליפת הנתונים. במקום לכתוב קוד ידני, ניתן להשתמש בתגים כגון:
#[request_body_json]לניתוח JSON באופן מיידי.#[request_query]כדי לתפוס פרמטרים ב-URL.#[request_header]כדי לשלוף headers ספציפיים.
ניהול נתיבים וסינון: ניתן להגדיר נתיבים דינמיים באמצעות תחביר ה-{param}. לדוגמה: "/test/{text}". Hyperlane מאפשרת גם לסנן בקשות ברמת הנתיב. ניתן:
- להתאים מארחים (hosts) ספציפיים באמצעות
#[host]. - לדחות referers ספציפיים באמצעות
#[reject_referer]. - להחיל לוגיקה מותאמת אישית באמצעות
#[filter].
ניהול תגובות ועוגיות (Cookies): ניתן לשלוט בתגובה דרך אובייקט ה-Context. ניתן להגדיר קודי סטטוס, headers וגופים (bodies) באופן ידני. כדי לפשט זאת, השתמשו במאקרואים של תגובה (response macros):
#[response_status_code(200)]#[response_body("Hello World")]
לניהול סשנים (sessions), השתמשו ב-CookieBuilder. הוא מאפשר להגדיר תאריכי תפוגה, דומיינים ודגלי אבטחה כמו HttpOnly או Secure בתחביר נקי.
ברגע שהתגובה מוכנה, שולחים אותה דרך הזרם (stream) באמצעות מתודות כמו build() ו-try_send().
Hyperlane מציעה שתי דרכים לעבודה. השתמשו בקריאות למתודות כאשר אתם זקוקים לשליטה מפורשת. השתמשו במאקרואים של תכונות כאשר אתם רוצים קוד נקי ומהיר.
קוד הפרויקט: https://github.com/hyperlane-dev/hyperlane
מקור: https://dev.to/tengxgfyrz67s/request-and-response-deep-dive-1j1b