1
0

index.md 4.2 KB


title: "Cookbook"

order: 0

「〇〇をするには?」という問いに答えるレシピ集です。各レシピは独立しているので、必要なページだけ読めます。

クライアント

基本

  • レスポンスボディを文字列で取得する / ファイルに保存する
  • JSON を送受信する
  • デフォルトヘッダーを設定する(set_default_headers
  • リダイレクトを追従する(set_follow_location

認証

  • Basic 認証を使う(set_basic_auth
  • Bearer トークンで API を呼ぶ

ファイル送信

  • ファイルをマルチパートフォームとしてアップロードする(make_file_provider
  • ファイルを生バイナリとして POST する(make_file_body
  • チャンク転送でボディを送る(Content Provider)

ストリーミング・進捗

  • レスポンスをストリーミングで受信する
  • 進捗コールバックを使う(set_progress

接続・パフォーマンス

  • タイムアウトを設定する(set_connection_timeout / set_read_timeout
  • 全体タイムアウトを設定する(set_max_timeout
  • 接続の再利用と Keep-Alive の挙動を理解する
  • 圧縮を有効にする(set_compress / set_decompress
  • プロキシを経由してリクエストを送る(set_proxy

エラー処理・デバッグ

  • エラーコードをハンドリングする(Result::error()
  • SSL エラーをハンドリングする(ssl_error() / ssl_backend_error()
  • クライアントにログを設定する(set_logger / set_error_logger

サーバー

基本

  • GET / POST / PUT / DELETE ハンドラを登録する
  • JSON リクエストを受け取り JSON レスポンスを返す
  • パスパラメーターを使う(/users/:id
  • 静的ファイルサーバーを設定する(set_mount_point

ストリーミング・ファイル

  • 大きなファイルをストリーミングで返す(ContentProvider
  • ファイルダウンロードレスポンスを返す(Content-Disposition
  • マルチパートデータをストリーミングで受け取る(ContentReader
  • レスポンスを圧縮して返す(gzip)

ハンドラチェーン

  • 全ルートに共通の前処理をする(Pre-routing handler)
  • Post-routing handler でレスポンスヘッダーを追加する(CORS など)
  • Pre-request handler でルート単位の認証を行う(matched_route
  • res.user_data でハンドラ間データを渡す

エラー処理・デバッグ

  • カスタムエラーページを返す(set_error_handler
  • 例外をキャッチする(set_exception_handler
  • リクエストをログに記録する(Logger)
  • クライアントが切断したか検出する(req.is_connection_closed()

運用・チューニング

  • ポートを動的に割り当てる(bind_to_any_port
  • listen_after_bind で起動順序を制御する
  • グレースフルシャットダウンする(stop() とシグナルハンドリング)
  • Keep-Alive を調整する(set_keep_alive_max_count / set_keep_alive_timeout
  • マルチスレッド数を設定する(new_task_queue

TLS / セキュリティ

  • OpenSSL・mbedTLS・wolfSSL の選択指針(ビルド時の #define の違い)
  • SSL 証明書の検証を制御する(証明書の無効化・カスタム CA・カスタムコールバック)
  • カスタム証明書検証コールバックを使う(set_server_certificate_verifier
  • SSL/TLS サーバーを立ち上げる(証明書・秘密鍵の設定)
  • mTLS(クライアント証明書による相互認証)を設定する
  • サーバー側でピア証明書を参照する(req.peer_cert() / SNI)

SSE

  • SSE サーバーを実装する
  • SSE でイベント名を使い分ける
  • SSE の再接続を処理する(Last-Event-ID
  • SSE をクライアントで受信する

WebSocket

  • WebSocket エコーサーバー/クライアントを実装する
  • ハートビートを設定する(set_websocket_ping_interval
  • 接続クローズをハンドリングする
  • バイナリフレームを送受信する