在 2023 年,在开始开发 API 和 Web 应用程序之前,哪个 Rust Web 框架最适合研究?在这里,我们将看看一些目前使用或看起来很有前途的最流行的框架。
Web 框架 (WF) 或 Web 应用程序框架 (WAF) 是一种软件框架,旨在支持 Web 应用程序的开发,包括 Web 服务、Web 资源、微服务和 Web API。Web 框架提供了一种在网上构建和部署 Web 应用程序的标准方法。Web 框架旨在自动化与 Web 开发中执行的常见活动相关的开销。
例如,许多 Web 框架提供用于数据库访问、模板框架(HTML、JSON 等)和会话管理的库,并且它们经常促进代码重用。虽然它们通常针对动态网站 的开发,但它们也适用于静态网站 。
Rust 是一种编程语言,为 Web 开发提供了巨大的潜力。它快速、安全,并为构建 Web 应用程序提供了许多完美的功能。以下是一些最佳框架及其开发需要考虑的功能。
Hyper Hyper 仍在开发中,可能会在 2023 年稳定发布。但是 Hyper 看起来像是一个有前途的框架,可以在 2023 年探索,然后再决定在 Rust 中构建一个 Web 应用程序。
Hyper 计划在 2023 年 1 月底发布稳定的 1.0 版本。如果您想了解有关迁移到稳定版 1.0 的更多信息,请关注这里
hyper 是一个用 Rust 编写的快速 HTTP 实现。Hyper 可以用作:
用于与 Web 服务通信的客户端。 用于构建这些 Web 服务的服务器。 极快的响应速度 具有高并发性和非阻塞套接字。 支持 HTTP/1 和 HTTP/2。
复制 use std:: { convert:: Infallible, net:: SocketAddr, error:: Error} ;
use http_body_util:: Full;
use hyper:: { Request, Response, body:: Bytes, service:: service_fn} ;
use hyper:: server:: conn:: http1;
use tokio:: net:: TcpListener;
async fn hello(
_: Request< hyper:: body:: Incoming> ,
) -> Result< Response< Full< Bytes>> , Infallible> {
Ok( Response:: new( Full:: new( Bytes:: from ( "Hello World!" ) ) ) )
}
#[ tokio:: main]
async fn main( ) -> Result< ( ) , Box< dyn Error + Send + Sync>> {
let addr = SocketAddr:: from ( ( [ 127 , 0 , 0 , 1 ] , 3000 ) ) ;
let listener = TcpListener:: bind( addr) .await ?;
loop {
let ( stream, _) = listener.accept ( ) .await ?;
tokio:: task:: spawn( async move {
if let Err( err) = http1:: Builder:: new( )
.serve_connection ( stream, service_fn( hello) )
.await
{
println! ( "Error serving connection: {:?}" , err) ;
}
} ) ;
}
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
任何使用 rust API 框架的开发人员都需要了解 Hyper。它具有许多功能,并且易于使用。文档也是一流的,是新开发人员的最佳的学习资源。
Actix-web Actix Web 是一个强大、实用且速度极快的 Rust Web 框架。Actix Web 基于 Rust Actor Model。它是一个用 Rust 编写的高性能 Web 框架,具有一组用于构建 Web 应用程序的强大功能。Actix Web 是类型安全的,功能丰富,可扩展和极快的。
它的活动网络
以下是编写响应 Hello World 的网页的方法:
复制 use actix_web:: { get, web, App, HttpRequest, HttpServer, Responder} ;
#[ get( "/" ) ]
async fn index( \_req: HttpRequest) -> impl Responder {
"Hello from the index page."
}
async fn hello( path: web:: Path< String> ) -> impl Responder {
format! ( "Hello World {}!" , & path)
}
#[ actix_web:: main]
async fn main( ) -> std:: io:: Result< ( ) > {
HttpServer:: new( || {
App:: new( )
.service ( index)
.route ( "/{name}" , web:: get( ) .to ( hello) )
} )
.bind ( ( "127.0.0.1" , 8080 ) ) ?
.run ( )
.await
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 运行 cargo run 就可以启动服务器,然后在浏览器中查看效果。
Rocket Rocket 是 Rust 的一个 Web 框架,它让编写 Web 应用程序变得非常简单和快速,并且它不会牺牲灵活性和类型安全,它无样板、且扩展易于使用。
Rocket 的哲学是让您以最少的配置启动和运行。它与 Rust 生态系统紧密集成,集成现有的库和工具非常容易。
下面是在 url 部署的页面示例,该页面采用 JSON 有效负载并将其存储在数据库中。
以下是网页实现的示例:PUT /:id
复制 #[ derive( Serialize, Deserialize) ]
struct Message< 'r> {
contents: &' r str,
}
#[ put( "/<id>" , data = "<msg>" ) ]
fn update ( db: & Db, id: Id, msg: Json< Message< '_>>) -> Value {
if db.contains_key(&id) {
db.insert(id, msg.contents);
json!({ "status": "ok" })
} else {
json!({ "status": "error" })
}
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Rocket 支持模板,拥有专题手册,支持异步流开箱即用。
Tide Tide 是一个基于 Rust 构建的最小且实用的 Web 应用程序框架。Tide 是为快速 Web 开发而构建的。Tide 带有一组强大的内置功能,可以轻松构建异步 Web 应用程序和 API。Tide 基于 rust actix Web 框架。
Tide 是功能丰富的 Web 框架。Tide 正在积极开发中,并拥有广泛的社区资源,可让您快速启动和运行
Tide 框架具有以下功能,可帮助快速构建应用程序
异步/等待支持 类型安全路由 请求守卫 模板支持 会话管理 网络套接字支持 让我们看一下使用 HTTP POST 谓词实现端点的示例
复制 use tide:: Request;
use tide:: prelude:: * ;
#[ derive( Debug, Deserialize) ]
struct Animal {
name: String,
legs: u16,
}
#[ async_std:: main]
async fn main( ) -> tide:: Result< ( ) > {
let mut app = tide:: new( ) ;
app.at ( "/orders/shoes" ) .post ( order_shoes) ;
app.listen ( "127.0.0.1:8080" ) .await ?;
Ok( ( ) )
}
async fn order_shoes( mut req: Request< ( ) > ) -> tide:: Result {
let Animal { name, legs } = req.body_json ( ) .await ?;
Ok( format! ( "Hello, {}! I've put in an order for {} shoes" , name, legs) .into ( ) )
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
现在,您可以使用 curl 访问具有 api /orders/shoes
复制 curl localhost: 8080 / orders/ shoes - d '{ "name": "Pankaj", "legs": 9 }'
这将响应预期的消息 Hello, Pankaj! I've put in an order for 9 shoes
Warp Warp 是一个超级简单、可组合的 Web 服务器框架,基于 Rust 构建,用于提高速度。Warp 突出的构建块是 Filter,它可以组合和组合以表达对请求的丰富需求.
得益于其过滤系统,warp 提供开箱即用的功能:
路径路由和参数提取 标头要求和提取 查询字符串反序列化 JSON 和表单正文 多部分表单数据 静态文件和目录 网络套接字 访问日志记录 Gzip、Deflate 和 Brotli 压缩 服务器发送的事件 (SSE) 由于它建立在 hyper 和 Tokio - 一个异步 Rust 运行时之上,因此您可以自动获得:
HTTP/1 和 HTTP/2 支持 异步功能 最快的 HTTP 实现之一 经过测试和正确 下面是一个使用 Warp 的简单 Hello, world 示例:
复制 // main.rs
use warp:: Filter;
#[ tokio:: main]
async fn main( ) {
// GET / hello/ warp => 200 OK with body "Hello, warp!"
let hello = warp:: path! ( "hello" / String)
.map ( | name| format! ( "Hello, {}!" , name) ) ;
warp:: serve( hello)
.run ( ( [ 127 , 0 , 0 , 1 ] , 3030 ) )
.await ;
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Axum Axum Web 框架旨在高效,快速和轻量级。Axum 的灵感来自 Erlang 编程语言,为开发人员提供了高效的并发性,非常适合开发实时 Web 应用程序、微服务和低延迟系统。Axum 是一个专注于人体工程学和模块化的 Web 应用程序框架。
要使用 Axum,您需要 Rust 版本 v1.6 或更高版本
Axum 的功能包括:
使用无宏 API 将请求路由到处理程序。 使用提取程序以声明方式分析请求。 简单且可预测的错误处理模型。 使用最少的样板生成响应。 充分利用中间件、服务和 tower-http。 支持 WebSocket 和其他协议 异步 I/O
QQQcJ1H" data-card-editable="false" data-syntax="plain">
复制 use actix_web::{web, App, Responder};
fn index() -> impl Responder {
"Hello, world!"
}
fn main() {
App::new().route("/", web::get().to(index)).run();
}
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
上面列出的框架只是 2023 年值得关注的一些 rust Web 应用程序框架。它们都具有不同的设计能力。你尝试测试它们并根据您的要求使用它们 .