tower
https://docs.rs/tower/latest/tower/
GitHub.icon https://github.com/tower-rs/tower
クラサバ 間の ネットワーキング における実装や処理を、柔軟かつ簡単に扱えるようにする クレート
axum で採用されている
タイムアウト や レートリミット、認証、ロードバランシング など、HTTP サーバの構築に必要な要素を Service と Layer という抽象単位にして、プラグイン的に差し込むことを可能にする
この抽象単位を ミドルウェア と呼ぶ
tower::Service
https://docs.rs/tower/latest/tower/trait.Service.html
任意の Request を受け取り、任意の Response を返すことだけが定義された トレイト
e.g.
ロギングや認証、リトライのための ミドルウェア
tower::Layer
https://docs.rs/tower/latest/tower/trait.Layer.html
tower::Service の デコレータ トレイト
複数の tower::Service で実行したい処理を登録することができる
名前の通り、何層にも重ねて 1 つの処理基板を作ることが可能
#Rust