ちゃっくのメモ帳

ちゃっくがメモしときたいことをメモしとくよ

actix-webのRequest HandlerでHTTPリクエストを送りたかった

TL; DR

use actix_web::client::Client
actix_web::client::Client - Rust

何があったか

リクエストハンドラの中でHTTPリクエストを送りたいということは珍しいことではない。例えば、APIを叩いた時に、APIサーバが別のAPIを叩いたりする場合がある。
これをactix-web(v3)でやりたかった。
Rustに詳しくないので、とりあえずググって出てきたreqwestを使えばいいのだろうという判断を下し、ハンドラの中からreqwestを使ってみた。
しかし、実際にこれを実装すると"thread 'actix-rt:worker:0' panicked at 'there is no reactor running, must be called from the context of a Tokio 1.x runtime'"というエラーとともにpanicをした。Tokio 1.x系のランタイムから呼ばれないと行けないらしい。
あれ、actix-webってtokio-coreを使ってるから大丈夫なのでは...とか思ったが、Cargo.lockをみるとactix-rtはtokio 0.2.24に依存している。
試しにtokio 1.xをdependencyに入れてもactix-rtがtokio 1.xを使ってくれるわけでもなさそうなので困った。reqwestのバージョンを下げればいいかもしれない?
後学のために、ここをうまく解消する方法を知っている人がいたらぜひコメントもしくはTwitterで教えてください。

では、とりあえずタイトルのactix-webのRequest HandlerからHTTPリクエストを送る方法がないのかといわれたら、そんなことはなく、そもそもreqwestを使うという発想が間違っており、actix_web::client::Clientを使えば良かった。この使い方はドキュメントをみてください。