这个 crate 提供了一个名为 Valid
的 axum 提取器,可以与 axum 框架的 Path
、Query
、Json
、Form
等提取器配合使用,自动调用 validator 库对其内部的对象自动进行合法性校验,也支持对自定义类型的提取器进行校验。
基本使用方法:
cargo add axum-valid
use validator::Validate;
use serde::Deserialize;
use axum_valid::Valid;
use axum::extract::Query;
use axum::Json;
#[derive(Debug, Validate, Deserialize)]
pub struct Pager {
#[validate(range(min = 1, max = 50))]
pub page_size: usize,
#[validate(range(min = 1))]
pub page_no: usize,
}
pub async fn get_page_by_query(
Valid(Query(pager)): Valid<Query<Pager>>,
) {
assert!((1..=50).contains(&pager.page_size));
assert!((1..).contains(&pager.page_no));
}
pub async fn get_page_by_json(
Valid(Json(pager)): Valid<Json<Pager>>,
) {
assert!((1..=50).contains(&pager.page_size));
assert!((1..).contains(&pager.page_no));
}
// ... 在 axum 的 router 中使用上述两个 handler
更详细具体的使用例子参考项目的 test.rs 文件, 配合自定义 extractor 使用可参考 tests/custom.rs
目前该 crate 已通过 feature 支持更多 extractor:
Feature | 描述 | 是否默认开启 | 是否有测试代码 |
---|---|---|---|
default | 启用对Path 、Query 、Json 和Form 的支持 |
✅ | ✅ |
json | 启用对Json 的支持 |
✅ | ✅ |
query | 启用对Query 的支持 |
✅ | ✅ |
form | 启用对Form 的支持 |
✅ | ✅ |
typed_header | 启用对TypedHeader 的支持 |
❌ | ✅ |
msgpack | 启用对axum-msgpack 中的MsgPack 和MsgPackRaw 的支持 |
❌ | ✅ |
yaml | 启用对axum-yaml 中的Yaml 的支持 |
❌ | ✅ |
extra | 启用对axum-extra 中的Cached 、WithRejection 的支持 |
❌ | ✅ |
extra_query | 启用对axum-extra 中的Query 的支持 |
❌ | ✅ |
extra_form | 启用对axum-extra 中的Form 的支持 |
❌ | ✅ |
extra_protobuf | 启用对axum-extra 中的Protobuf 的支持 |
❌ | ✅ |
all_extra_types | 启用上述所有axum-extra 提取器的支持 |
❌ | ✅ |
all_types | 启用上述所有提取器的支持 | ❌ | ✅ |
422 | 当验证失败时,使用422 Unprocessable Entity 而不是400 Bad Request 作为状态码 |
❌ | ✅ |
into_json | 将验证错误序列化为JSON格式,并作为HTTP正文返回 | ❌ | ✅ |
full | 启用所有特性 | ❌ | ✅ |
欢迎提 issue 和 PR。
1
共 3 条评论, 1 页
评论区
写评论因为Axum基于hyper,而hyper目前正在稳定1.0,另外tower-http也有不少不足之处,而Actix Web出得最早,除了你说的稳定方便,各种第三方包也很多。所以我选择Axum
--
👇
github.com/shanliu/lsys: 个人感觉 acitx-web 比Axum 方便,而且api跟代码结构也更稳定。
0.7 跟0.6估计又会不太兼容,目前官方例子都跑不通。。。 感觉还在变来变去的。优势就是tokio的官产版,等到1.0在看吧。
个人感觉 acitx-web 比Axum 方便,而且api跟代码结构也更稳定。
0.7 跟0.6估计又会不太兼容,目前官方例子都跑不通。。。 感觉还在变来变去的。优势就是tokio的官产版,等到1.0在看吧。
好赞, axum 又添一员大将, 感觉可以自己包一层然后更简洁地使用