前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rust warp框架教程1-helloworld

rust warp框架教程1-helloworld

作者头像
zy010101
发布2023-07-11 13:52:00
7920
发布2023-07-11 13:52:00
举报
文章被收录于专栏:程序员程序员

warp框架简介

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

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

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

代码语言:javascript
复制
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 中所有的依赖放在下面。

代码语言:javascript
复制
[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 程序。

代码语言:javascript
复制
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 路径:

代码语言:javascript
复制
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 服务器。因此,通常只需要使用一个静态服务器做反向代理即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • warp框架简介
    • 安装warp框架
      • hello-world 示例
        • 可能会存在的疑问
      • 部署相关
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档