rust warp框架教程1-helloworld

Warp是一个用Rust编写的轻量级、可组合的Web服务器框架,以其高效的过滤器系统著称,支持异步操作、HTTP/2协议。它建立在Hyper之上,提供灵活的路径和请求头处理。安装Warp只需在Cargo.toml中添加依赖,并通过`warp::serve`和`run`方法启动服务。示例代码展示了如何创建一个简单的Hello,world!服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

warp框架简介

warp is a super-easy, composable, web server framework for warp speeds.

warp建立在hyper之上,因此,warp天生支持异步,HTTP/2,以及“正确的HTTP实现”。

warp的强大之处在于其提供的filter系统,它帮助我们实现了非常灵活的对HTTP的处理。我们可以来先看一下文档中给出的例子:

use warp::Filter;

let hi = warp::path("hello")
    .and(warp::path::param())
    .and(warp::header("user-agent"))
    .map(|param: String, agent: String| {
        format!("Hello {}, whose agent is {}", param, agent)
    });

这个示例中,使用and组合了多个Filter。

  • warp::path("hello") 要求路径的前缀是 hello;
  • warp::path::param() 提取路径参数;
  • warp::header("user-agent") 提取请求头中的 user-agent;
  • map 接受一个闭包,将前面提取的路径参数和请求头参数都提取为 String 类型,传入闭包,闭包将返回一个组装的字符串。

从这个示例中,我们可以看到,warp带来的非常灵活的 Filter 系统,可以让我们很容易的处理 HTTP 中的各种参数。

安装warp框架

在 rust 中安装 warp 是非常简单的,使用 cargo 即可。这里介绍安装 warp 框架是为了介绍目前 rust 开发 web 相关的库。我将 cargo.toml 中所有的依赖放在下面。

[package]
name = "web_warp"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
log = "0.4"
pretty_env_logger = "0.4"

tokio = { version = "1", features = ["full"] }
warp = "0.3"
sqlx = { version = "0.6", features = [ "runtime-tokio-rustls", "postgres", "macros", "chrono" ] }

serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
  • log 和 pretty_env_logger 是我们在 wrap 中使用的 log 库。pretty_env_logger 可以在控制台输出比较漂亮的日志记录,pretty_env_loggor 的作者也是 warp 的作者;
  • tokio 是 rust 社区中比较常用的异步运行时,我们使用的 warp 和 sqlx 都需要依赖于 tokio; sqlx 的 features 需要看 sqlx 的文档,它在 0.7 版本可能会发生比较大的变化。目前的依赖表明 sqlx 的异步运行时是 tokio, 驱动是 postgres, 支持 macros 宏,支持 chrono 时间类型;
  • serde 是序列化框架,serde_json 是基于 serde 实现的 json 序列化和反序列化框架。

hello-world 示例

安装完成依赖之后,我们可以来跑一下 hello-world 程序。

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

我们可以在命令行使用 curl 命令来访问一下 /hello/warp 路径:

curl http://127.0.0.1:3030/hello/warp

访问之后,应该可以看到 Hello, warp! 这样的消息返回。

  • warp::serve(hello) 将路由加入到 server 中,而 run 中指定了 127.0.0.1 以及 3030 端口,注意这是异步的,因此最后要使用await.

可能会存在的疑问

在这里插入图片描述
有人可能会问,这里的 hello 是什么类型,这是个好问题,后面我们在说。现在,你只需要知道,你不能被这个类型吓住,望而止步即可。

部署相关

warp 框架本身就是 hyper 这样的 HTTP 服务器,因此在部署的时候是不需要额外的动态服务器,它本身就提供了 HTTP 服务器。因此,通常只需要使用一个静态服务器做反向代理即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值