rust warp框架教程1-helloworld

news2024/9/25 11:17:25

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件设计模式与体系结构-设计模式-生成模式单例模式

目录 二、生成器模式1. 生成者模式概念实例一:房屋选购系统题目时序图类图 优缺点适用场景 2. 生成器模式与抽象工厂模式3. 课程作业*** 三、单例模式1. 单例模式要点:基本思路实例一:互联网连接问题 2. 多线程情况3. 优缺点4. 适用场景5. 课…

leetcode 88.合并两个有序数组

⭐️ 题目描述 🌟 leetcode链接:合并两个有序数组 ⭕️ 代码: /*思路:双指针问题1.从前往后拷贝依次比较两个数组元素的较小值,较小值先拷贝- 问题:从前拷贝会造成覆盖(有问题)2.从后往前拷贝依次比较两个…

SpringBoot(五)SpringBoot事务

在实际开发项目时,程序并不是总会按照正常的流程去执行,有时候线上可能出现一些无法预知的问题,任何一步操作都有可能发生异常,异常则会导致后续的操作无法完成。此时由于业务逻辑并未正确的完成,所以在之前操作过数据…

单臂路由实现不同VLAN之间数据转发

实验环境: 思科模拟器,Cisco Packet Tracer 实验拓扑: 实验配置: (1)PC配置 IP地址子网掩码网关PC1192.168.10.1255.255.255.0192.168.10.254PC2192.168.10.2255.255.255.0192.168.10.254PC3192.168.20…

串口通讯监控方法

当我们调试硬件的时候,发现串口数据异常,用示波器和逻辑分析仪的话会比较麻烦,此时可以并一个监控串口,如下图所示 232串口,我们是不能直接并一个串口上去的;但是我们的监控串口,可以只接一根R…

【玩转循环】探索Python中的无限可能性

前言 循环可能是每个编程语言中使用比较多的语法了,如果能合理利用好循环,就会出现意想不到的结果,大大地减少代码量,让机器做那些简单枯燥的循环过程,今天我将为大家分享 python 中的循环语法使用。🚗&am…

数据结构--栈的链式存储

数据结构–栈的链式存储 推荐使用不带头结点的单链表 \color{green}推荐使用不带头结点的单链表 推荐使用不带头结点的单链表 typedef struct LNode {ElemType data;struct LNode* next; } LNode, *LinkList;bool InitList(LinkList &L) {L->next NULL; }后插操作&…

python网络编程(二)模拟ssh远程执行命令

1、项目需求: 要实现一个像ssh远程连接工具一样,在终端输入命令,返回对应的结果。 比如window的dos命令: dir :查看目录下的文件 ipconfig : 查看网卡信息 tasklist : 查看进程列表 linux的命令: ls : 查看…

Jenkins与CI/CD

简介 CI(持续集成) Continuous Integration是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编…

Debian 环境使用 docker compose 部署 sentry

Debian 环境使用 docker compose 部署 sentry Sentry 简介什么是 Sentry ?Sentry 开发语言及支持的 SDKSentry 功能架构 前置准备条件规格配置说明Dcoker Desktop 安装WSL2/Debian11 环境准备 Sentry 安装步骤docker 部署 sentry 步骤演示过程说明 总结 Sentry 简介…

python机器学习在气象模式订正、短临预报、气候预测等场景的应用

基于机器学习的天河机场物流预测研究 全球经济快速增长的形势下,八大区域性枢纽之一的武汉天河机场的物流需求也在攀升。文章针对天河机场的货邮吞吐量,运用机器学习中的线性回归模型通过Python对其进行需求预测,并用二次指数平滑法与之对比,在平均绝对百分误差比较下得出机器…

需求分析引言:架构漫谈(四)性能专题

前文介绍了非功能性需求里的可靠性和可用性, 本文对非功能性需求里的性能,进行一些详细的说明,和如何度量系统的性能问题。 1、概念 性能通常是指一个软件系统的处理能力和速度,一般通过 延迟 和 吞吐量 这两个指标进行度量。 不…

分布式软件架构——域名解析系统

透明多级分流系统的设计原则 用户在使用信息系统的过程中,请求首先是从浏览器出发,在DNS的指引下找到系统的入口,然后经过了网关、负载均衡器、缓存、服务集群等一系列设施,最后接触到了系统末端存储于数据库服务器中的信息&…

云计算——容器

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.容器简介 二.主流容器技术 1.docker (1)容器的组…

HTML5+ Runtime提示

使用的环境 vue-cli框架,Andriod调试、云打包都会出现该弹框 1.我遇到的问题 上述弹框提示,HBuilderX3.8.2 , 手机SDK版本是3.8.4,不匹配 解决目的:需要让两个版本匹配 2. 点击“查看详情”,查看原因 …

JS文件UTF8格式乱码问题

UTF8格式的JS文件在IE中显示乱码问题的解决 这种情况通常是由于JS文件头缺少BOM标志引起的,解决方式: 方法1:用系统自带记事本,另存为 UTF-8,覆盖原文件,会自动加上BOM标志(就是文件开头的EF BB BF 三个字节) 方法2: 用notepad 打开,编码菜单,由UTF8编码改为 UTF8-BOM编码

10-Vue从入门到手撕

什么时候可以开始学习Vue? 学习路线:H5 CSS3 ---> ES6 ---> 网络 ---> 第三方库 ---> 工程化 ---> Vue 不经过前面的铺垫是无法学习vue的,就算学了还得倒回去补知识点 展现Vue Vue源码分析,走进作者的内心世界 …

记录一次对STM32G4串口硬件FIFO的调试

记录一次对STM32G4串口硬件FIFO的调试 前言:通常我们使用串口接收多字节数据会使用中断和DMA两种方式。使用中断方式,每接收到一个字节就会触发一次中断,我们可以在中断函数里将接收到的这一字节保存在内存中然后等待其他程序处理&#xff0c…

麦语言是什么东东?怎么学?

麦语言(M Language)是一种用于处理数据的编程语言,最初由微软公司开发。它是Power Query(数据提取和转换工具)和Power BI(商业智能工具)中的一部分。麦语言支持对各种数据源进行查询、转换和清理…

农业温室大棚数据监控系统的设计与实现

1.引言 农业温室大棚作为现在农业发展的必要条件,将高新技术融入农业温室大棚也愈发的重要,对农业温室大棚数据的监控,将温室大棚智能化。本设计对温室大棚实现远程数据监控,自动化控制,对温室内的环境数据进行巡回检…