Plaza 新闻汇总

Axum 0.8.0 版本发布公告

新年快乐!🎉

今天,我们很高兴地宣布 axum 0.8 版本发布。axum 是一个使用 tokio、tower 和 hyper 构建的符合人体工程学且模块化的 Web 框架。

此次发布还包括 axum-core、axum-extra 和 axum-macros 的新主要版本。

以下是此版本中一些最值得注意的更改:

**路径参数语法更改**

路径参数语法已从 /:single 和 /*many 更改为 /{single} 和 /{*many}。

更改的原因有很多,但最重要的是旧语法不允许使用以 : 或 * 字符开头的路由定义。

这种新语法是在我们升级到 matchit 0.8 时引入的。它应该与 format!() 宏的格式有点类似,这也是 OpenAPI 描述中使用的语法。转义使用双大括号完成,因此如果您想匹配文字 { 或 } 字符,您可以编写 {{ 或 }}。

我们明白这对基本上所有 axum 用户来说都是一个重大更改,但我们认为现在进行此更改比以后在更多用户依赖旧语法时再进行更改更好。迁移路径也应该相对简单,因此我们希望此更改不会给您造成太多麻烦。

您可以在相应的 pull request 中找到更多信息和迁移示例。感谢 David Mládek 在 axum 中的实现以及 Ibraheem Ahmed 对 matchit 的持续工作。

**Option<T> 作为提取器**

Option<T> 作为提取器的方式发生了变化。以前,来自 T 提取器的任何拒绝都会被简单地忽略并转换为 None。

现在,Option<T> 作为提取器要求 T 实现新的特征 OptionalFromRequestParts(或 OptionalFromRequest)。

这使得处理来自 T 提取器的拒绝并将其转换为错误响应成为可能,同时仍允许提取器是可选的。

假设您有一个 AuthenticatedUser 提取器,它要求请求中存在有效的令牌,但在某些情况下,身份验证是可选的。您现在可以使用 Option<AuthenticatedUser> 作为提取器,而不会失去在令牌无效或数据库连接失败时返回错误响应的能力。

感谢 Jonas Platte 提供了引入此新功能的 pull request。

**#[async_trait] 移除**

在 2023 年底,Rust 团队实现了在特征中使用 impl Future<Output = _> 的功能。此功能称为特征中的 return-position impl Trait,这意味着我们不再需要 #[async_trait] 宏来在特征中定义异步方法。

此更改主要影响我们的 FromRequestParts 和 FromRequest 特征,因为它们使用异步方法。如果您有实现这些特征的自定义提取器,则需要从其中删除 #[async_trait] 注解。

此更改由 Zheng Li 实现。感谢您的贡献!

**查看更新日志以获取更多信息**

此版本中还有许多其他更改,包括新功能、错误修复和不太明显的重大更改。我们鼓励您阅读更新日志以查看所有更改!

此外,如果您在更新时遇到问题,请打开 GitHub 讨论。您也可以在 Discord 中提问。

最后,我们要感谢所有帮助使此版本发布成为可能的贡献者。您的工作深受赞赏!

— axum 维护者

原文地址
2025-01-06 02:01:18