Skip to main content

2 posts tagged with "Web开发"

View All Tags

发布日期:2025年1月1日

🎉 新年快乐!

我们很高兴地宣布发布 axum 0.8.0 版本。 axum 是一个基于 tokio、tower 和 hyper 构建的人性化且模块化的 Web 框架。

此次发布还包括 axum-coreaxum-extraaxum-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 实现新的 trait OptionalFromRequestParts(或 OptionalFromRequest)。

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

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

感谢 Jonas Platte 提交的引入这一新功能的 Pull Request。

移除 #[async_trait]

在 2023 年末,Rust 团队使得在 trait 中使用 impl Future<Output = _> 成为可能。 这一特性称为 trait 中的位置返回 impl Trait,这意味着我们不再需要 #[async_trait] 宏来定义 trait 中的异步方法。

这一变化主要影响我们的 FromRequestPartsFromRequest traits,因为它们使用异步方法。 如果你有实现这些 traits 的自定义提取器,需要移除其中的 #[async_trait] 注解。

这一更改由郑力(Zheng Li)实现。感谢你的贡献!

详细变更日志

以下是 axum 0.8.0 版本的详细变更日志:

破坏性更改 (Breaking Changes)

  • 升级 matchit 到 0.8:路径参数语法从 /:single/*many 更改为 /{single}/{*many};旧语法会导致 panic 以避免行为的静默变化。#2645
  • 要求所有处理器和服务为 Sync:新增到 Router 和 MethodRouter 中的所有处理器和服务现在需要实现 Sync#2473
  • 元组路径提取器的参数检查:元组和元组结构的 Path 提取器反序列化器现在会严格检查参数数量是否与元组长度匹配。#2931
  • 移动 Host 提取器到 axum-extra#2956
  • 移除 WebSocket::close:用户需要显式发送关闭消息。#2974
  • 使 serve 泛化:针对监听器和 IO 类型进行泛化。#2941
  • 移除 Serve::tcp_nodelay 和 WithGracefulShutdown::tcp_nodelay:参见 serve::ListenerExt 以设置任意 TCP 流属性。#2941
  • Option<Path<T>> 行为变化:不再吞噬所有错误条件,而是在许多情况下拒绝请求;详见文档。#2475
  • WebSocket Message 类型变化axum::extract::ws::Message 现在使用 Bytes 代替 Vec<u8>,并引入了 Utf8Bytes 类型代替 String#3078

修复 (Fixes)

  • 跳过 SSE 不兼容字符:在 Event::json_data 中跳过 serde_json::RawValue 的不兼容字符。#2992
  • 路径段使用数组类型时避免 panic#3039
  • 避免在中间件前设置 content-length:允许中间件为请求添加主体而无需手动设置 content-length。#2897

变更 (Changes)

  • 更新最低 Rust 版本:提升到 Rust 1.75。#2943
  • 升级 tokio-tungstenite 到 0.26#3078
  • Query/Form 解析错误报告:使用 serde_path_to_error 报告解析失败的字段。#3081

新增功能 (Added)

  • 添加 method_not_allowed_fallback:在路径匹配但没有对应 HTTP 方法处理器时设置回退处理器。#2903
  • 添加 NoContent 快捷方式:用于 StatusCode::NO_CONTENT 的自描述快捷方式。#2978
  • 支持 HTTP/2 上的 WebSockets:通过将 get(ws_endpoint) 处理器更改为 any(ws_endpoint) 来启用。#2894
  • 添加 MethodFilter::CONNECT 和相关路由功能#2961
  • 扩展 FailedToDeserializePathParams::kind 枚举:新增 ErrorKind::DeserializeError 变体,以捕获命名路径参数解析错误的键、值和消息。#2720

查看完整更新日志

此次发布还有许多其他更改,包括新功能、错误修复以及不太明显的破坏性更改。我们鼓励您阅读更新日志以了解所有更改!

您可以在 axum-core 的更新日志 中找到更多相关的更改。

如果在更新过程中遇到问题,请在 GitHub 上发起讨论,或在 Discord 上提问。

最后,我们要感谢所有帮助实现此次发布的贡献者。感谢你们的辛勤工作!

参考链接

鱼雪

2024 年 12 月 9 日,Dioxus 0.6 重磅发布!这次更新带来了许多全新的工具特性,显著提升了开发者体验,包括移动模拟器支持、热重载、交互式 CLI 等,助力开发者更高效地构建全栈应用。


什么是 Dioxus?

Dioxus 是一个全栈开发框架,支持通过单一代码库构建 Web、桌面和移动应用。我们的目标是打造一个比 Flutter 更强大的框架。Dioxus 专注于:

  • 一流的全栈 Web 支持
  • 类型安全的服务器/客户端通信
  • 极致的性能

0.6 版本的主要亮点

此次发布,我们重新设计了 Dioxus CLI,大幅提升了开发者体验,修复了许多长期存在的问题,并引入了一系列新功能。

1. 全新 Dioxus CLI

以下是 Dioxus CLI 的关键改进:

  • dx serve for mobile:支持在 Android 和 iOS 模拟器及设备上运行应用。
  • 神奇的热重载:支持格式化字符串、属性和嵌套的 rsx!{} 的热重载。
  • 交互式 CLI:借鉴 Astro 的交互式用户体验,重新设计了 Dioxus CLI。
  • 内联堆栈跟踪:直接在终端中捕获 WASM 崩溃和日志。
  • 桌面和移动端的服务器函数支持:为本地应用内联服务器 RPC。

2. 全框架开发者体验改进

我们还在框架的其他方面进行了大量优化:

  • 通知与加载屏幕:开发模式下新增通知与加载屏幕,提升调试体验。
  • 自动补全改进:大幅提升 RSX 的自动补全效果。
  • asset! 稳定化:稳定了集成于原生应用的基于链接器的资源系统。
  • 流式 HTML:支持从服务器到客户端的流式 Suspense 和错误边界。
  • 静态网站生成(SSG)与增量静态生成(ISG):支持更多静态网站构建模式。
  • 事件错误处理:在事件处理器、任务和组件中使用 ? 处理错误。
  • Meta 元素:新增 HeadTitleMetaLink 元素,用于设置文档属性。
  • 同步的 prevent_default:跨平台同步处理事件。
  • onresize 事件处理器:无需 IntersectionObserver 也能跟踪元素大小变化。
  • onvisible 事件处理器:无需 IntersectionObserver 也能跟踪元素可见性。
  • WGPU 集成:支持将 Dioxus 渲染为 WGPU 表面及子窗口的覆盖层。
  • dx bundle:全面支持 Web、iOS 和 Android 平台的打包。
  • JSON 模式:CLI 消息支持 JSON 输出,便于第三方工具和 CI/CD 流程使用。
  • 新模板:新增三个跨平台应用的启动模板。
  • 教程与指南:推出面向 Dioxus 0.6 及后续版本的新教程和指南。
  • 二进制补丁原型:基于纯 Rust 的热重载引擎原型。

重点改进详情

神奇的热重载

Dioxus 的热重载功能实现了前所未有的便利性,不仅支持常规的代码热更新,还能对嵌套的 rsx!{} 结构进行即时刷新。这极大提升了开发效率,尤其是在复杂 UI 开发场景中。

交互式 CLI

新版 CLI 借鉴了 Astro 的交互式设计,提供了更直观的用户体验。例如,在构建项目时,CLI 会根据用户选择动态更新配置,减少不必要的手动操作。

WASM 崩溃与日志捕获

通过内联堆栈跟踪功能,开发者可以直接在终端中查看 WASM 的崩溃原因及日志信息。这有助于快速定位问题,尤其是在调试复杂 Web 应用时。


新功能概览

特性描述
移动模拟器支持在 Android 和 iOS 上快速运行和测试应用。
流式 HTML 支持从服务器流式加载 Suspense 和错误边界,提升性能。
SSG 与 ISG 支持更灵活的静态网站生成和增量更新支持。
WGPU 集成在 WGPU 表面和子窗口中渲染 Dioxus 应用。
新教程与模板快速上手跨平台开发的全新模板和详细指南。
JSON 模式CLI 消息支持 JSON 格式,便于与 CI/CD 集成。
事件处理改进新增同步 prevent_defaultonresize 等功能。
二进制补丁原型纯 Rust 实现的热重载引擎,带来更快的开发迭代体验。

未来发展

Dioxus 将继续优化开发体验,增加对更多平台和场景的支持。我们希望通过 Dioxus,开发者能够更高效地构建现代化应用。

鱼雪