2023 年值得关注的六个 Rust Web开发框架

开发 前端
Web 框架 (WF) 或 Web 应用程序框架 (WAF) 是一种软件框架,旨在支持 Web 应用程序的开发,包括 Web 服务、Web 资源、微服务和 Web API。Web 框架提供了一种在网上构建和部署 Web 应用程序的标准方法。

在 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);
            }
        });
    }
}

任何使用 rust API 框架的开发人员都需要了解 Hyper。它具有许多功能,并且易于使用。文档也是一流的,是新开发人员的最佳的学习资源。

Actix-web

Actix Web 是一个强大、实用且速度极快的 Rust Web 框架。Actix Web 基于 Rust Actor Model。它是一个用 Rust 编写的高性能 Web 框架,具有一组用于构建 Web 应用程序的强大功能。Actix Web 是类型安全的,功能丰富,可扩展和极快的。

它的活动网络

  • 支持多路复用
  • 异步 I/O
  • 网络套接字
  • 中间件支持

以下是编写响应 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
}

运行 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" })
    }
}

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())
}

现在,您可以使用 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;
}

Axum

Axum Web 框架旨在高效,快速和轻量级。Axum 的灵感来自 Erlang 编程语言,为开发人员提供了高效的并发性,非常适合开发实时 Web 应用程序、微服务和低延迟系统。Axum 是一个专注于人体工程学和模块化的 Web 应用程序框架。

要使用 Axum,您需要 Rust 版本 v1.6 或更高版本

Axum 的功能包括:

  • 使用无宏 API 将请求路由到处理程序。
  • 使用提取程序以声明方式分析请求。
  • 简单且可预测的错误处理模型。
  • 使用最少的样板生成响应。
  • 充分利用中间件、服务和 tower-http。
  • 支持 WebSocket 和其他协议
  • 异步 I/O

use actix_web::{web, App, Responder};

fn index() -> impl Responder {

    "Hello, world!"

}

fn main() {

    App::new().route("/", web::get().to(index)).run();

}

上面列出的框架只是 2023 年值得关注的一些 rust Web 应用程序框架。它们都具有不同的设计能力。你尝试测试它们并根据您的要求使用它们。

责任编辑:武晓燕 来源: 程序那些事儿
相关推荐

2024-02-01 00:21:41

Rust编程框架

2024-07-12 05:00:00

2022-12-14 14:25:28

2022-12-14 14:18:52

2023-06-05 00:25:32

2020-02-03 09:30:42

开发技能代码

2023-03-20 14:52:48

2023-06-29 15:41:40

CSSWeb 开发

2022-09-05 10:13:28

物联网趋势物联网IOT

2022-12-04 23:48:24

JavaScrip框架编程语言

2022-12-29 11:33:49

2023-03-29 15:26:45

2023-03-05 16:57:04

2022-08-15 10:21:44

机器学习人工智能

2015-03-09 15:51:47

WEB技术WEB 2015年

2022-09-05 21:38:16

物联网IoT

2023-04-03 11:30:12

云计算趋势云平台

2023-08-24 09:00:00

Java编程

2019-01-02 08:35:42

开发者技能博客

2021-05-19 10:06:56

零信任网络安全网络攻击
点赞
收藏

51CTO技术栈公众号