ГЛИБОКИЙ РОЗБІР ЗАПИТІВ ТА ВІДПОВІДЕЙ

Кожен HTTP-сервер працює за певним циклом. Він приймає з'єднання, парсить запит, зіставляє його з маршрутом і надсилає відповідь.

Hyperlane спрощує цей процес. Ви можете керувати цим циклом за допомогою прямих викликів методів або простих атрибутних макросів.

Як Hyperlane обробляє життєвий цикл запиту:

  • Сервер приймає TCP-з'єднання.
  • Він парсить потік в об'єкт Request.
  • Middleware запиту обробляє дані.
  • Сервер зіставляє запит із маршрутом.
  • Виконується обробник маршруту (route handler).
  • Запускається middleware відповіді.
  • Відповідь надсилається клієнту.

Доступ до даних запиту: Ви можете використовувати об'єкт Context, щоб отримати дані із запиту. • get_method() для HTTP-методу. • get_path() для шляху URL. • get_headers() для всіх заголовків. • get_body_json() для парсингу JSON-тіл. • try_get_query() для пошуку конкретних параметрів.

Hyperlane також використовує атрибутні макроси для автоматизації вилучення даних. Замість написання коду вручну, ви можете використовувати такі теги:

  • #[request_body_json] для миттєвого парсингу JSON.
  • #[request_query] для отримання параметрів URL.
  • #[request_header] для отримання конкретних заголовків.

Управління маршрутами та фільтрація: Ви можете визначати динамічні маршрути, використовуючи синтаксис {param}. Наприклад: "/test/{text}". Hyperlane також дозволяє фільтрувати запити на рівні маршруту. Ви можете:

  • Зіставляти конкретні хости за допомогою #[host].
  • Відхиляти конкретні реферери за допомогою #[reject_referer].
  • Застосовувати власну логіку за допомогою #[filter].

Управління відповідями та cookie: Ви керуєте відповіддю через об'єкт Context. Ви можете вручну встановлювати коди статусів, заголовки та тіла відповідей. Щоб спростити це, використовуйте макроси відповіді:

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

Для керування сесіями використовуйте CookieBuilder. Він дозволяє встановлювати дати закінчення терміну дії, домени та прапорці безпеки, такі як HttpOnly або Secure, за допомогою чистого синтаксису.

Коли ваша відповідь готова, ви надсилаєте її через потік за допомогою таких методів, як build() та try_send().

Hyperlane пропонує два способи роботи. Використовуйте виклики методів, коли вам потрібен явний контроль. Використовуйте атрибутні макроси, коли ви хочете мати чистий і швидкий код.

Код проєкту: https://github.com/hyperlane-dev/hyperlane

Джерело: https://dev.to/tengxgfyrz67s/request-and-response-deep-dive-1j1b