Rust 语言从入门到实战
唐刚
Rust 语言中文社区联合创始人
5266 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
Rust 语言从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

21|Web开发(上):如何使用Axum框架进行Web后端开发?

你好,我是 Mike, 今天我们来讲一讲如何用 Axum 框架进行 Web 服务器后端开发。
关于 Rust 是否适合做 Web 后端开发,很多人持怀疑态度。认为 Web 开发讲究的是敏捷,一种动态的、带运行时的、方便修改的语言可能更适合 Web 开发。
但有一些因素,其实决定了 Rust 非常适合 Web 开发。
时代变化:芯片摩尔定律已失效,服务器成本逐渐占据相当大的比例,无脑堆服务器的时代已经过去。当前阶段,对于规模稍微大一些的公司来说,降本增效是一个很重要的任务。而 Rust 的高性能和稳定可靠的表现非常适合帮助公司节省服务器成本。
随着业务的成型,一些核心业务会趋于稳定,模型和流程抽象已经基本不会有大的改动。这时,使用 Rust 重写或部分重写这些业务,会带来更强的性能和更可靠稳定的服务表现。
Rust 非常适合用来做一些通用的中间件服务,目前开源社区已经出现了一些相当优秀的中间件产品。
Rust 的表达能力其实非常强,其强大的类型系统可帮助开发者轻松地对问题进行建模。一个中等熟练的 Rust 开发者做原型的速度不会比 Python 慢多少,在复杂问题场景下,甚至更快。
Rust 的语言层面的设计使它特别适合做重构。重构 Rust 工程特别快,重构完后,也不用担心出错的问题。相对于动态语言,对应的测试用例都可以少准备很多。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何使用Axum框架进行Web后端开发,以及Rust在Web开发中的适用性。文章首先讨论了Rust在Web后端开发中的优势,包括高性能、稳定可靠、适合重构等特点。接着介绍了Rust Web后端开发生态的繁荣局面,以及Axum框架的特性和优势。Axum框架基于Tokio技术栈,具有模块化、无需使用宏、简单可预测的错误处理模型等特点。此外,文章还介绍了Tower中间层服务和Tower-http库,以及Axum框架中的Router和Handler的使用方法。最后,文章通过示例演示了如何使用Axum框架进行Web后端开发,包括创建Hello World应用和实现静态文件服务。通过本文,读者可以了解到Rust在Web后端开发中的优势,以及Axum框架的特性和使用方法。Axum框架的简洁易读的代码示例展示了Rust强类型的优势,以及其在保证Web后端服务正确性和可靠性方面的优势。文章还提出了思考题,鼓励读者深入思考Request/Response模型以及Axum框架与其他gRPC框架的区别。整体而言,本文为读者提供了全面了解Rust在Web开发中的优势以及Axum框架的特性和使用方法的机会。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 语言从入门到实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • 小虎子🐯
    置顶
    版本已经更新到 0.7 啦

    作者回复: 对的,今天已经更新啦

    2023-12-11归属地:北京
    2
  • 鸠摩智
    windows powershell中的启动命令:$env:RUST_LOG="debug" ; cargo run 。不设置级别的话,默认看不到debug级别的日志

    作者回复: 好的,感谢补充win下的信息。

    2023-12-11归属地:江苏
    2
  • tan
    时区设置 ● cargo add time --features macros ● cargo add tracing-subscriber --features time ```rust use time::macros::{format_description, offset}; use tracing_subscriber::fmt::time::OffsetTime; let time_fmt = format_description!("[year]-[month]-[day]T[hour]:[minute]:[second].[subsecond digits:3]"); let timer = OffsetTime::new(offset!(+8), time_fmt); // init tracing_subscriber::fmt().with_max_level(Level::TRACE).with_timer(timer).init(); // use tracing::info!("listening on {}", listener.local_addr().unwrap()); ```

    作者回复: 👍

    2024-01-11归属地:重庆
    1
  • 一只
    第一个例子 hello-world 需要使用链接中的依赖版本才能运行,应该是库的接口发生变更了。 或者使用 官方最新例子 ```rust use axum::{response::Html, routing::get, Router}; #[tokio::main] async fn main() { // build our application with a route let app = Router::new().route("/", get(handler)); // run it let listener = tokio::net::TcpListener::bind("127.0.0.1:3000") .await .unwrap(); println!("listening on {}", listener.local_addr().unwrap()); axum::serve(listener, app).await.unwrap(); } async fn handler() -> Html<&'static str> { Html("<h1>Hello, World!</h1>") } ```

    作者回复: 抱歉,文章是基于0.6的版本,这个月出的0.7有一些break change。今天已经更新了。

    2023-12-11归属地:上海
    1
  • buoge
    日志部分配合这个看会更佳 使用 tracing 记录日志:https://course.rs/logs/tracing.html

    作者回复: 很棒!

    2023-12-20归属地:北京
  • Geek_e72251
    tracing输出的日志时区不对,怎么设置时区啊?

    作者回复: 这里:https://users.rust-lang.org/t/tracing-print-in-different-timezone/83994/4 https://rustcc.cn/article?id=66e2a76e-8c65-42f7-a773-66dff1a2a21e

    2023-12-16归属地:广东
    2
  • Carlsama
    内容已经调整到0.7了吗?看了评论有点不敢跟着抄写代码,等都更完再一块看

    编辑回复: 是的,更新到0.7啦,可以等今晚的(下)出来一起看

    2023-12-12归属地:广东
  • My dream
    怎么用这个框架实现读取、导出xls或者pdf文件啊?

    作者回复: xlsx和pdf的生成原理就是 数据+ driver。crates.io 上你可以搜索这两个关键字,找下载量最大的用。你先拿到数据,然后按对应格式在axum handler里面调用驱动处理就行啦

    2023-12-12归属地:四川
  • 雍和
    老师,文中说的evn_logger是不是笔误了呢?实际是env_logger?

    作者回复: 好的,谢谢,马上处理。另外,我们正在升级到0.7来讲解。2,3天搞定。

    2023-12-11归属地:广东
  • -
    咋没有用最新版的0.7版本啊?

    作者回复: 今天紧急更新了。

    2023-12-11归属地:陕西
    2
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部