mcpField
R
rust-http-client

rust-http-client

github.com/full-stack-skills開発12111 回インストール5 週間前に更新
リポジトリ

rust-http-client について

RustでHTTPクライアントを構築するためのスキルです。明示的な上限、リトライ規則、信頼境界を重視し、クライアント設定、通信の安全性、レジリエンス、各種リクエスト・レスポンスのテストを扱います。

主な機能

  1. 01設定済みreqwestクライアントを再利用
  2. 02タイムアウト、本文、並行数を制限
  3. 03安全で上限のあるリトライを適用
  4. 04プロキシ、リダイレクト、認証情報を制御
  5. 05複数の境界でHTTP動作をテスト

活用シーン

  1. 01接続プール付きRust HTTPクライアントを実装
  2. 02リトライとレスポンスサイズ制限に対応
  3. 03リダイレクトと認証情報のポリシーを確認
  4. 04タイムアウト、ストリーミング、不正レスポンスをテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/full-stack-skills/rust-skills --skill rust-http-client

インストール後、Claude Code で/rust-http-clientを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
examples/
examples.md
examples/golden-http-client/
Cargo.lock
Cargo.toml
examples/golden-http-client/src/
lib.rs
references/
client-configuration-and-transport.md
resilience-and-backpressure.md
testing-http-clients.md

詳細

Rust HTTP クライアント

送信 HTTP はリソースであり、信頼境界でもあるものとして扱います。設定済みのクライアントを再利用し、すべての段階に上限を設け、プロトコルエラーを保持し、リトライ、認証情報、プロキシ、宛先のポリシーを明示します。

適用範囲と振り分け

HTTP/1.1、HTTP/2、オプションの HTTP/3 サポート、リクエストの構築、接続プール、DNS、プロキシ、TLS、リダイレクト、リトライ、ストリーミング、クライアント側のテストには、このスキルを使用します。

受信側のルーターやハンドラーは rust-web に、SSRF と認証情報のポリシーは rust-web-security に、タスクのライフサイクルと大量の並行処理は rust-concurrency に、テレメトリーは rust-observability に振り分けます。生の TCP/UDP やプロトコルの実装は、後続のネットワークプロトコル用スキルに振り分けます。

ワークフロー

1. リモートとの契約を定義する

ベース URL、メソッド、パスとクエリのエンコーディング、ヘッダー、認証、リクエストとレスポンスのスキーマ、ステータスの意味、冪等性、本文の上限、ページネーション、レート制限、タイムアウトの予算、リトライポリシー、プロキシと TLS の要件、サポート対象プラットフォームを記録します。ロックファイルに記載された依存関係のバージョンと有効な機能を確認します。

2. 設定済みのクライアントを作成して再利用する

通常のアプリケーション HTTP には reqwest::Client を使用します。接続プーリングを維持するために再利用します。最適化できそうだというだけではなく、より低レベルの接続、本文、またはプロトコル制御が実際に必要な場合は Hyper を使用します。

use std::time::Duration;

let client = reqwest::Client::builder()
    .connect_timeout(Duration::from_secs(3))
    .timeout(Duration::from_secs(15))
    .redirect(reqwest::redirect::Policy::limited(3))
    .build()?;

リクエストごとにクライアントを作成しないでください。システムプロキシ、リダイレクト、Cookie、圧縮、ネイティブのルート証明書、カスタムルート証明書を許可するかどうかを慎重に決めます。クライアントの設定とトランスポートを参照してください。

3. リクエストとレスポンスに上限を設ける
  • サポートされる場合は、全体のデッドラインに加えて、段階ごとの制限を適用します。
  • 大きな本文を割り当てる前に、同時に処理するリクエスト数に上限を設けます。
  • 信頼できないコンテンツをバッファリングせず、アップロードとダウンロードをストリーミングします。
  • 通知された本文サイズと、実際にデコードされた本文サイズの両方を制限します。Content-Length がない場合や、誤解を招く値の場合もあります。
  • ページネーション、リダイレクト、展開、リトライ、エラー本文の取得に上限を設けます。
  • リクエストの future を破棄するか、future を対象とした選択処理を行うことでキャンセルを保持し、呼び出し元の境界でクリーンアップを確認します。
4. 安全な操作だけをリトライする

操作が冪等であるか、冪等性キーで保護されている場合に限り、トランスポート障害や選択したステータスをリトライします。試行回数に上限を設け、ジッターを加えた指数バックオフ、全体のデッドライン、有効な場合は Retry-After などのサーバーからのヒントを使用します。認証失敗や、すべての 5xx を無条件にリトライしないでください。タイムアウト、リトライ、同時実行数制限、レート制限、負荷抑制、サーキットブレーカーのポリシーを、順序を明記して配置します。レジリエンスとバックプレッシャーを参照してください。

5. 信頼境界を適用する
  • url で宛先を解析します。信頼できない URL を連結しないでください。
  • ユーザーが制御する宛先では、スキーム、ホスト、ポート、リダイレクト先、DNS の結果、プライベートアドレスやリンクローカル範囲を制限します。
  • 認証情報の適用先を承認済みのオリジンに限定し、オリジンをまたぐリダイレクトでは機密ヘッダーを削除します。
  • TLS 検証を有効に保ちます。カスタムルート証明書、クライアント証明書、SNI、ALPN、鍵ログを確認します。
  • 環境変数で設定されたプロキシを信頼するかどうかを決めます。必要に応じて no_proxy または明示的なプロキシルールを使用します。

セキュリティポリシーについては rust-web-security と調整してください。

6. 複数の境界でテストする
  • リクエストの構築、URL エンコーディング、認証の選択、リトライの判断、レスポンスのマッピングを単体テストします。
  • モックサーバーを使用し、ステータス、ヘッダー、遅延、リダイレクト、途中で切れた本文、不正なペイロードをテストします。
  • ソケット、ストリーミング、キャンセル、プーリング、プロキシ、TLS の動作には、実際のローカルサーバーを使用します。
  • CI で安定して実行でき、かつ許可されている場合に限り、小規模な外部サンドボックスまたはプロバイダーの契約テストを使用します。

HTTP クライアントのテストを参照してください。

完了条件

  • 明示的な機能、プロキシ、リダイレクト、DNS、TLS のポリシーを設定してクライアントを再利用します。
  • デッドライン、並行数、リトライ、リダイレクト、ページネーション、本文サイズに上限を設定します。
  • トランスポート、プロトコル、デコード、アプリケーションの各エラーを構造化された状態で保持します。
  • リプレイ可能であることが実証された操作のみをリトライします。
  • 宛先やリダイレクトを通じた認証情報の漏えいと SSRF を防ぎます。
  • 成功、タイムアウト、過負荷、リダイレクト、大きな本文、不正なレスポンス、キャンセルの各経路をテストします。

リソース

上流ソース

データプライバシー

このスキルはユーザーデータを収集、保存、送信しません。明示的な許可なく、テスト中に実際の認証情報、顧客のペイロード、非公開のエンドポイントを送信しないでください。

コメント