リクエストとレスポンスの徹底解説
すべてのHTTPサーバーは、特定のサイクルに従います。接続を受け入れ、リクエストを解析し、ルートを照合し、レスポンスを送信します。
Hyperlaneはこのプロセスを簡単にします。直接的なメソッド呼び出し、またはシンプルな属性マクロを使用して、このサイクルを管理できます。
Hyperlaneにおけるリクエストライフサイクルの処理:
- サーバーがTCP接続を受け入れます。
- ストリームをRequestオブジェクトに解析します。
- リクエストミドルウェアがデータを処理します。
- サーバーがリクエストをルートに照合します。
- ルートハンドラーが実行されます。
- レスポンスミドルウェアが実行されます。
- レスポンスがクライアントに返されます。
リクエストデータの取得: 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] で特定のrefererを拒否する
- #[filter] でカスタムロジックを適用する
レスポンスとクッキーの管理: Contextオブジェクトを通じてレスポンスを制御します。ステータスコード、ヘッダー、ボディを手動で設定できます。 これを簡素化するには、レスポンスマクロを使用します:
- #[response_status_code(200)]
- #[response_body("Hello World")]
セッション管理にはCookieBuilderを使用します。これにより、有効期限、ドメイン、およびHttpOnlyやSecureといったセキュリティフラグをクリーンな構文で設定できます。
レスポンスの準備ができたら、build()やtry_send()といったメソッドを使用してストリーム経由で送信します。
Hyperlaneには2つの作業方法があります。明示的な制御が必要な場合はメソッド呼び出しを使用してください。クリーンで高速なコードを書きたい場合は属性マクロを使用してください。
Project Code: https://github.com/hyperlane-dev/hyperlane
Source: https://dev.to/tengxgfyrz67s/request-and-response-deep-dive-1j1b