Salvo 0.26.1 发布,Request 提取数据大改进


Salvo 是 Rust 语言编写的简单易用, 又不失功能强大的 Web 后端框架.

此版本主要改进了 Request 数据提取的功能:

可以轻松地从多个不同数据源获取数据, 并且组装为你想要的类型. 可以先定义一个自定义的类型, 比如:

#[derive(Serialize, Deserialize, Extractible, Debug)]
/// 默认从 body 中获取数据字段值
#[extract(default_source(from = "body"))]
struct GoodMan<'a> {
/// 其中, id 号从请求路径参数中获取, 并且自动解析数据为 i64 类型.
#[extract(source(from = "param"))]
id: i64,
/// 可以使用引用类型, 避免内存复制.
username: &'a str,
first_name: String,
last_name: String,
}

然后在 Handler 中可以这样获取数据:

#[fn_handler]
async fn edit(req: &mut Request) -> String {
let good_man: GoodMan<'_> = req.extract().await.unwrap();
}

甚至于可以直接把类型作为参数传入函数, 像这样:

#[fn_handler]
async fn edit<'a>(good_man: GoodMan<'a>) -> String {
res.render(Json(good_man));
}

数据类型的定义有相当大的灵活性, 甚至可以根据需要解析为嵌套的结构:

#[derive(Serialize, Deserialize, Extractible, Debug)]
#[extract(default_source(from = "body", format = "json"))]
struct GoodMan<'a> {
#[extract(source(from = "param"))]
id: i64,
#[extract(source(from = "query"))]
username: &'a str,
first_name: String,
last_name: String,
lovers: Vec<String>,
/// 这个 nested 字段完全是从 Request 重新解析.
#[extract(source(from = "request"))]
nested: Nested<'a>,
}

#[derive(Serialize, Deserialize, Extractible, Debug)]
#[extract(default_source(from = "body", format = "json"))]
struct Nested<'a> {
#[extract(source(from = "param"))]
id: i64,
#[extract(source(from = "query"))]
username: &'a str,
first_name: String,
last_name: String,
#[extract(rename = "lovers")]
#[serde(default)]
pets: Vec<String>,
}

查看完整源码

Github: https://github.com/salvo-rs/salvo


相關推薦

2022-05-24

: 添加了 test 模块, 方便单元测试, 比起之前使用 http::Request::builder 构建 Request 请求简洁很多. 添加解析 Request 请求数据到强类型的功能, 并且支持多数据源组合. 详细介绍 Salvo 是极其简单且功能强大的框架 Handler use salvo::

2023-12-14

框架。 这是基于 Hyper 1.0-rc4 的最后一个版本,不久就会发布基于 Hyper 1.0 正式版本的下一个版本。 特色: - 有着比 axum 等更丰富的功能,但却更易于上手。 - 跟 go 等其他语言框架更接近,比 Rust 语言各个 Web 框架更少的类型

2023-12-15

的简单好用且功能强大的 Web 后端框架。 虽然昨天刚刚发布 0.61, 今天基于 Hyper 1.0 的全新版本就好了。 我们不跟 Axum 比爹爹,我们只跟它比功能,比易用性。 如果你不曾爱上用 Rust 开发 Web 后端,那只是你没有遇到 Salvo. 如果

2023-08-13

Salvo 是一个极其简单且功能强大的 Rust Web 后端框架. 仅仅需要基础 Rust 知识即可开发后端服务. 中国用户可以添加我微信(chrislearn), 拉微信讨论群. 基于 Hyper, Tokio 开发; 支持 HTTP1, HTTP2 和 HTTP3; 统一的中间件和句柄接口;

2023-07-07

Salvo 可以说是最强大好用的 Rust Web 框架。 主要功能和更新: 最简单的 Handler 和 Middleware 的写法, 两个概念合二为一; 与众不同的路由系统; 丰富且功能强大的自带的中间件, base auth, jwt auth(支持 oidc), csrf, otel, proxy, flash, cors,

2024-05-31

Salvo 是 Rust 实现的简单好用且功能强大的 Web 后端框架。 不管你是刚刚 Rust 入门还是使用 Rust 做正规项目开发, Salvo 都很适合。近五年时间的持续维护改进,品质有保证。 同时 Rust 可以让你逃离 Axum 等框架无穷无尽的类型体

2023-11-28

jsoup 1.17.1 现已发布,支持 request-level 身份验证、属性名称和值源范围、stream( ) 可迭代支持以及大量其他改进和错误修复。jsoup 是一个用于处理 real-world HTML 的 Java 库。它使用最好的 HTML5 DOM 方法和 CSS 选择器提供了一

2022-08-25

假设想查看框架中的哪些代码发生了变化( $_SЕRVER['REQUEST_URI']),但不知道在哪里设置断点,这就是全局条件断点有用的地方。 调试 PHPUnit 测试时的交互式调试控制台 在调试测试时遇到断点时,可以立即在控制台中使用

2023-10-22

相约开源PHP办公室,我们一起聊 AI!>>> 阿里达摩院宣布发布业内首个遥感 AI 大模型(AIE-SEG),号称“率先在遥感领域实现了图像分割的任务统一,一个模型实现‘万物零样本’的快速提取”,并可识别农田、水域、建筑物等

2023-04-18

简介 Restful Fast Request 是一个类似于 Postman 的 IDEA 插件。它是一个强大的 restful api 工具包插件,可以根据已有的方法帮助您快速、自动生成 url 和 params。 Restful Fast Request = API 调试工具 + API 管理工具 + API 搜索工具。 它有一个

2022-10-01

版本添加了对CacheAPI 的支持。该 API 可用于缓存 Request/Response 对象,对于动态生成 response 的场景十分有帮助。它允许缓存 GET 请求的 response,并从缓存中为类似请求提供 response。 下面是一个基于name查询生成 response 的示

2024-09-26

定性依然受到很多挑战,为此我们进行了一系列优化。 Request Throttling ESS 服务是被集群上运行的所有 Spark 共享,它在集群的每个节点上都部署了 Shuffle Service 服务进程,该服务进程面向该节点上运行的所有 Spark 作业提供 Shuff

2023-12-19

证、加密密码管理器、安全删除)。 PeaZip 9.6 现已正式发布,该版本更新内容如下: CODE (Windows)(peazip)\res\share\lang-wincontext 文件夹中的所有上下文菜单翻译 .reg 脚本现在都编码为 UTF-16 LE。 所有脚本现在都导出为 UTF-8 编码

2023-06-03

MapperTrait.php的setPaginate 方法添加第二个参数,可接收request的数据 [优化] DependProxy注解 values 未指定时,提取当前类的所有接口,感谢 @长久 贡献的代码 [优化] Str::Ip2Region 变更为 Ip2RegionListener::class 感谢