PHÂN TÍCH CHUYÊN SÂU VỀ REQUEST VÀ RESPONSE

Mọi máy chủ HTTP đều tuân theo một chu trình cụ thể. Nó chấp nhận một kết nối, phân tích một request, khớp với một route và gửi một response.

Hyperlane giúp quá trình này trở nên dễ dàng. Bạn có thể quản lý chu trình này bằng cách gọi phương thức trực tiếp hoặc sử dụng các attribute macro đơn giản.

Cách Hyperlane xử lý vòng đời của Request:

  • Máy chủ chấp nhận một kết nối TCP.
  • Nó phân tích luồng (stream) thành một đối tượng Request.
  • Request middleware xử lý dữ liệu.
  • Máy chủ khớp request với một route.
  • Route handler được thực thi.
  • Response middleware chạy.
  • Phản hồi được gửi trả lại cho client.

Truy cập dữ liệu Request: Bạn có thể sử dụng đối tượng Context để lấy dữ liệu từ một request. • get_method() để lấy HTTP method. • get_path() để lấy URL path. • get_headers() để lấy tất cả các header. • get_body_json() để phân tích JSON body. • try_get_query() để tìm các tham số cụ thể.

Hyperlane cũng sử dụng các attribute macro để tự động hóa việc trích xuất dữ liệu. Thay vì viết mã thủ công, bạn có thể sử dụng các thẻ như:

  • #[request_body_json] để phân tích JSON ngay lập tức.
  • #[request_query] để lấy các tham số URL.
  • #[request_header] để lấy các header cụ thể.

Quản lý và Lọc Route: Bạn có thể định nghĩa các route động bằng cú pháp {param}. Ví dụ: "/test/{text}". Hyperlane cũng cho phép bạn lọc các request ở cấp độ route. Bạn có thể:

  • Khớp các host cụ thể với #[host].
  • Từ chối các referer cụ thể với #[reject_referer].
  • Áp dụng logic tùy chỉnh với #[filter].

Quản lý Response và Cookie: Bạn kiểm soát phản hồi thông qua đối tượng Context. Bạn có thể thiết lập mã trạng thái (status code), header và body một cách thủ công. Để đơn giản hóa việc này, hãy sử dụng các response macro:

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

Để quản lý phiên (session), hãy sử dụng CookieBuilder. Nó cho phép bạn thiết lập ngày hết hạn, domain và các cờ bảo mật như HttpOnly hoặc Secure với cú pháp gọn gàng.

Khi phản hồi đã sẵn sàng, bạn gửi nó qua stream bằng các phương thức như build()try_send().

Hyperlane cung cấp cho bạn hai cách để làm việc. Sử dụng các lời gọi phương thức khi bạn cần kiểm soát tường minh. Sử dụng các attribute macro khi bạn muốn mã nguồn sạch sẽ và nhanh chóng.

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

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