我正在使用 AWS Lambda 和 Rust 构建一个 REST API。我希望 Rust 代码能够处理同一个库中的多个资源,因为这似乎比为每个资源创建单独的二进制文件更有意义。
我想做的是使用actix_web的配置和中间件选项来配置我的 REST 端点。因为我的代码在 AWS Lambda 环境中运行,所以我不需要使用HttpServer
. actix_web
代码只需要使用 from 的配置响应来自同一线程内的App
请求actix_web
。
我研究了 actix_lambda但它实际上启动了一个单独的线程,HttpServer
这似乎是不必要的资源使用。
我想编写的代码类似于:
fn main() -> Result<(), Box<dyn Error>> {
lambda!(handle); // this macro is from lambda_http crate
Ok(())
}
fn handle(request: Request, _ctx: Context) -> Result<impl IntoResponse, HandlerError> {
let app = App::new()
.service(web::resource("/resource1").to(|| HttpResponse::Ok())))
.service(web::resource("/resource2").to(|| HttpResponse::Ok())))
.service(web::resource("/resource3").to(|| HttpResponse::Ok())));
// the method below does not exist, but what I would like to do is
// figure out where the incoming request is pointing to and let the
// App configuration take it from there.
app.handle(request)
}
问题:
- 是否可以以类似于上面代码显示的方式使用不带的
App
部分?actix_web
HttpServer
- 不使用
HttpServer
以避免产生线程有意义吗? - 为什么以前没有人这样做过?
- 为每个 REST 资源使用单独的二进制文件会更好吗?
- 我不应该使用
actix_web
并创建自己的路由和中间件解决方案吗? - 有没有更鲁莽的方法来解决这个问题?(我是 Rust 新手)