Response
Handler 内では、Response が引数として渡されます:
Response構造体は HTTP レスポンスの全要素をカプセル化し、HTTP レスポンスを構築・操作するための完全な API を提供します。- チェーンメソッド呼び出しスタイル(例:
res.status_code(200).body("Hello"))をサポートし、レスポンスを流暢に構築できます。 - 主な機能:
- ステータスコードとヘッダーの設定
- レスポンスボディの操作(文字列、バイト、ファイル、ストリーミングデータをサポート)
- Cookie の管理
- 多様なコンテンツレンダリング方法
- この構造体は可変参照モードを採用し、
&mut selfを通じて自身の参照を返すため、ハンドラは HTTP レスポンスを簡単に構築・カスタマイズし、様々な Web サービス要件を満たすことができます。
サーバーがクライアントリクエストを受信した後、Response には、一致したすべての Handler とミドルウェアがデータを書き込むことができます。特定の状況では、例えばあるミドルウェアが後続のミドルウェアや Handler の実行を阻止したい場合、FlowCtrl を使用できます:
コンテンツの書き込み
Response にデータを書き込むことは非常に簡単です:
-
プレーンテキストデータの書き込み
-
JSON シリアライズデータの書き込み
Warning
render メソッドを複数回呼び出して JSON データを書き込む場合、これらのデータは単一の JSON オブジェクトにマージされず、独立したテキストフラグメントとして順番に連結されるため、無効な JSON フォーマットになる可能性があります。複数のデータを返す必要がある場合は、それらを一つのオブジェクトに組み合わせてから一度にシリアライズするか、ロジックを自身で処理する必要があります。
-
HTML の書き込み
HTTP エラーの書き込み
-
renderを使用して、Responseに詳細なエラー情報を書き込むことができます。 -
カスタムエラーメッセージが不要な場合は、直接
set_http_codeを呼び出すことができます。
他の URL へのリダイレクト
renderメソッドを使用して、Responseにリダイレクトレスポンスを書き込み、新しい URL にナビゲートすることができます。Redirect::foundメソッドを呼び出すと、HTTP ステータスコードが 302(Found)に設定され、一時的なリダイレクトを意味します。
ResBody
Response が返す Body の型は ResBody です。これは列挙型であり、エラー発生時には ResBody::Error に設定されます。ここにはエラー情報が含まれており、エラーの遅延処理に使用されます。StatusError は実際には Writer を実装しておらず、Catcher で独自の表示方法をカスタマイズできるようにすることを目的としています。