2023年,在开始开发API和Web应用程序之前,最好研究哪个RustWeb框架?在这里,我们来看看一些目前正在使用或看起来很有前途的最流行的框架。Web框架(WF)或Web应用程序框架(WAF)是一种软件框架,旨在支持Web应用程序的开发,包括Web服务、Web资源、微服务和WebAPI。Web框架提供了一种在Web上构建和部署Web应用程序的标准方法。Web框架旨在自动化与Web开发中执行的常见活动相关的开销。例如,许多Web框架提供用于数据库访问、模板框架(HTML、JSON等)和会话管理的库,它们通常促进代码重用。虽然它们通常针对动态网站的开发,但它们也适用于静态网站。Rust是一种为Web开发提供巨大潜力的编程语言。它快速、安全,并为构建Web应用程序提供了许多强大的功能。以下是一些最好的框架和开发时需要考虑的特性。HyperHyper仍在开发中,可能会在2023年发布稳定版本。但Hyper看起来像是一个有前途的框架,可以在2023年探索,然后再决定用Rust构建Web应用程序。Hyper计划在2023年1月底之前发布稳定的1.0版本。如果您想了解有关迁移到稳定的1.0的更多信息,请关注此处hyper是一个用Rust编写的快速HTTP实现。Hyper可用作:与Web服务通信的客户端。用于构建这些Web服务的服务器。具有高并发性和非阻塞套接字的极快响应时间。支持HTTP/1和HTTP/2。使用std::{convert::Infallible,net::SocketAddr,error::Error};使用http_body_util::Full;使用hyper::{Request,Response,body::Bytes,service::service_fn};使用hyper::server::conn::http1;usetokio::net::TcpListener;asyncfnhello(_:Request,)->Result>,Infallible>{Ok(Response::new(Full::new(Bytes::from("HelloWorld!"))))}#[tokio::main]asyncfnmain()->Result<(),Box>{letaddr=SocketAddr::from(([127,0,0,1],3000));让listener=TcpListener::bind(addr).await?;loop{let(stream,_)=listener.accept().await?;tokio::task::spawn(asyncmove{ifletErr(err)=http1::Builder::new().serve_connection(stream,service_fn(hello)).await{println!("错误服务连接:{:?}“,呃);}});}}任何使用rustAPI框架的开发人员都需要要了解Hyper,它具有许多功能并且易于使用。该文档也是一流的,是新开发人员的绝佳学习资源。Actix-webActixWeb是一个强大、有用且速度极快的RustWeb框架。ActixWeb基于RustActor模型。它是一个用Rust编写的高性能Web框架,具有一组用于构建Web应用程序的强大功能。ActixWeb类型安全、功能丰富、可扩展且速度极快。其activeweb支持多路复用异步I/Owebsocket中间件支持如下是如何编写响应HelloWorld的网页:useactix_web::{get,web,App,HttpRequest,HttpServer,Responder};#[get("/")]asyncfnindex(\_req:HttpRequest)->implResponder{"Hellofromtheindexpage."}asyncfnhello(path:web::Path)->implResponder{格式!("HelloWorld{}!",&path)}#[actix_web::main]asyncfnmain()->std::io::Result<()>{HttpServer::new(||{App::new().service(index).route("/{name}",web::get().to(hello))}).bind(("127.0.0.1",8080))?.run().await}运行cargorun启动服务器,然后在浏览器中查看效果。RocketRocket是Rust的Web框架,它使编写Web应用程序变得非常容易和快速,而不会牺牲灵活性和类型安全性,它没有样板文件,并且易于与扩展一起使用。Rocket的理念是以最少的配置让您启动并运行。它与Rust生态系统紧密集成,非常容易集成现有的库和工具。下面是一个部署在url的页面示例,它采用JSON负载并将其存储在数据库中。下面是一个网页实现的例子:PUT/:id#[derive(Serialize,Deserialize)]structMessage<'r>{contents:&'rstr,}#[put("/",data="")]fnupdate(db:&Db,id:Id,msg:Json>)->Value{ifdb.contains_key(&id){db.insert(id,msg.内容);json!({"status":"ok"})}else{json!({"status":"error"})}}Rocket支持模板,有专门的手册,支持开箱即用的异步流。TideTide是一个基于Rust构建的最小且功能强大的Web应用程序框架。Tide专为快速Web开发而构建。Tide带有一组强大的内置功能,可以轻松构建异步Web应用程序和API。Tide基于rustactixweb框架。Tide是一个功能丰富的Web框架。Tide正在积极开发中,拥有广泛的社区资源,可以帮助您快速启动和运行Tide框架具有以下功能,可帮助快速构建应用程序Async/await支持类型安全路由请求守卫模板支持会话管理Web套接字支持让我们看一个示例使用HTTPPOST谓词实现端点usetide::Request;usetide::prelude::*;#[derive(Debug,Deserialize)]structAnimal{name:String,legs:u16,}#[async_std::main]asyncfnmain()->tide::Result<()>{让mutapp=tide::new();app.at("/orders/shoes").post(order_shoes);app.listen("127.0.0.1:8080").await?;Ok(())}asyncfnorder_shoes(mutreq:Request<()>)->tide::Result{letAnimal{name,legs}=req.body_json().await?;Ok(format!("Hello,{}!I'veputinanorderfor{}shoes",name,legs).into())}现在你可以使用curl访问api/orders/shoescurllocalhost:8080/orders/shoes-d'{"name":"Pankaj","legs":9}'这将以预期的消息响应你好,Pankaj!我已经订购了9只鞋WarpWarp是一个超级简单、可组合的Web服务器框架,它构建在Rust上以提高速度。Warp突出的构建块是Filter,它可以组合和组合以表达对requests的丰富需求。由于其过滤系统,warp提供了开箱即用的功能:路径路由和参数提取标头要求和查询字符串的提取反序列化JSON和表单文字多部分表单数据静态文件和目录Web套接字访问日志记录Gzip、Deflate和BrotlicompressionServer-SentEvents(SSE)因为它建立在hyper和Tokio之上——一个异步Rust运行时,所以你会自动得到:HTTP/1和HTTP/2对异步函数的支持最快的HTTP实现之一经过测试和纠正这是一个使用Warp的简单Hello,world示例://main.rsusewarp::Filter;#[tokio::main]asyncfnmain(){//GET/hello/warp=>200OKwithbody"Hello,warp!"lethello=warp::path!("hello"/String).map(|name|format!("Hello,{}!,name));warp::serve(hello).run(([127,0,0,1],3030)).await;}Axum高效、快速和轻量级。受Erlang编程语言的启发,Axum为开发人员提供了高效的并发性,是开发实时Web应用程序、微服务和低延迟系统的理想选择。Axum是一个专注于人体工程学和模块化的Web应用程序框架。要使用Axum,您需要Rust版本v1.6或更高版本Axum的功能包括:使用无宏API将请求路由到处理程序。使用提取器以声明方式解析请求。简单且可预测的错误处理模型。使用最少的样板生成响应。利用中间件、服务和tower-http。支持WebSocket等协议异步I/Ouseactix_web::{web,App,Responder};fnindex()->implResponder{"Hello,world!"}fnmain(){App::new().route("/",web::get().to(index)).run();}上面列出的框架只是2023年值得关注的一些RustWeb应用程序框架。它们都具有不同的设计能力。您尝试测试它们并根据您的要求使用它们。