图书前言

拥抱Rust全栈开发,开启高效安全编程新纪元

当今时代,软件开发领域风起云涌,新技术、新框架层出不穷。作为一名 Rust开发者和技术爱好者,我深知开发者在享受技术红利的同时,也面临着日益严峻的挑战:如何在保障系统高性能、高并发的同时,兼顾代码的安全性和可维护性?如何在快速迭代的开发节奏中,降低错误发生的概率,提升开发效率?传统的编程语言在面对这些挑战时,往往显得力不从心。而 Rust 语言的出现,为我们提供了一种全新的、极具潜力的解决方案。

我有幸提前拜读了“Web开发与设计”丛书的新作《Rust 全栈开发》,深感这是一本能够引领开发者进入 Rust Web 全栈开发新世界、并能切实解决上述挑战的优秀著作。

为什么你需要阅读这本书?

在信息爆炸、技术快速迭代的今天,选择一本适合自己的书,就如同获得了一位经验丰富的导师,能够帮助你少走弯路,快速掌握核心技能。

以下是我对《Rust 全栈开发》内容的一个重点摘要,方便广大读者查看本书是否适合你。

1. 系统掌握 Rust Web 开发从后台到前端的全貌:无论你是Rust新手,还是有一定 经验的开发者,本书都能为你提供系统全面的Rust Web开发知识。它从Rust基础、Web服务概念讲起,逐步深入到 Actix  Web框架的使用、数据库操作、异步编程、错误处理、模板引擎、客户端测试,乃至P2P网络编程和Docker部署。

2. 从实践中学习,提升实战能力:本书最大的特点在于其实战性。它以一个名为EzyTutors的在线教育平台项目为贯穿全书的案例,从需求分析、架构设计到代码实现,手把手教你如何使用Rust构建一个真实的Web应用。通过这个项目,你不仅可以学习Rust Web开发的各项技术,更能够理解如何将这些技术应用到实际项目中,以解决实际问题。

3. 深入理解Rust核心优势:本书不仅教你“如何做”,还会深入讲解“为什么这样做”。通过本书,你将深刻理解Rust语言在内存安全、并发安全、零成本抽象等方面的独特优势,以及这些优势如何帮助你构建更加健壮、高效、安全的Web应用。

4. 掌握前沿技术,拓展技术视野。本书不仅停留在基础知识和常见用例。它前瞻性地引入了异步Rust和P2P网络编程的内容。

●异步Rust:在现代Web应用中,处理高并发、I/O密集型任务是常态。本书详细讲解了Rust的异步编程模型,包括async/await语法、future的使用,以及如何利用Tokio运行时构建高效的异步Web服务。

●libp2p:去中心化应用是未来的趋势。本书专门用一章介绍了如何使用Rust和libp2p库构建P2P应用。libp2p是一个模块化的网络协议栈,用于构建点对点应用程序,它提供了传输层、安全性、多路复用、对等路由、内容发现等功能。通过学习第11章,你将掌握构建去中心化应用的基础知识,为未来的Web 3.0开发做好准备。

阅读本书你将收获什么?

1. 扎实的Rust Web开发基础:你将掌握使用Rust编写Web服务、处理HTTP请求、操作数据库、渲染模板、进行客户端测试等核心技能。

2. 构建高性能、高并发Web应用的能力:你将理解Rust在并发编程方面的优势,学会如何利用Rust的异步编程模型构建高吞吐量、低延迟的Web服务。

3. 编写安全、可靠代码的信心:你将深入理解Rust的所有权系统和借用检查器,掌握编写内存安全、无数据竞争代码的方法。

4. 解决实际问题的实战经验:通过EzyTutors项目的实践,你将获得构建真实Web应用的宝贵经验,提升你的项目开发能力。

5. 拥抱未来技术趋势的前瞻视野:本书介绍的异步编程,libp2p,为你打开通向区块链技术的大门。

寄语

Rust语言近年来发展迅猛,凭借其独特的优势,已成为系统编程、Web开发、嵌入式开发等领域的新宠。《Rust 全栈开发》的出版,为中文开发者学习和掌握Rust全栈开发提供了难得的机遇。

我强烈推荐每一位对Rust语言、Web开发、以及对构建高性能、安全、可靠的应用程序感兴趣的开发者阅读本书。我相信,通过本书的学习与实践,你定能在Rust的世界中乘风破浪,构建出属于自己的精彩应用!

张汉东

资深独立咨询师,《Rust编程之道》的作者

译 者 序

在当今这个信息爆炸、技术迅速更新换代的时代,编程语言的迭代似乎永不停歇。然而,Rust这门语言以其独特的魅力和强大的功能,成功地在众多语言中脱颖而出。我在早期的职业生涯,一直使用C++进行程序开发。近年来,当接触到Rust,并在几个项目实际应用后,我便被Rust的诸多特性深深吸引。Rust的安全性、性能和并发能力让我在许多新项目中毫不犹豫地选择了它,来替代C++。

我有幸翻译了这本《Rust全栈开发》,希望通过我的努力,将Rust的精髓和魅力介绍给更多对技术充满热情的朋友们。

在翻译本书的过程中,我深刻感受到了Rust语言的严谨与优雅。它不仅在语法上追求简洁,更在运行时保证了内存安全,有效避免了传统编程语言常见的内存泄漏和数据竞争问题。虽然对初学者来说,Rust的所有权系统和生命周期概念可能有些难以理解,但这正是Rust确保内存安全的核心。随着我对这些概念的深入学习和实践,我逐渐发现它们其实是既直观又强大的工具,能够帮助开发者编写出既安全又高效的代码。

《Rust 全栈开发》内容丰富,涵盖了Rust的基础知识和实战项目,能够帮助读者打下坚实的基础,并引导他们将理论知识应用到实践中,逐步提升编程技能。无论是数据库编程、网络编程、错误处理还是Web应用开发,Rust都能提供稳定而高效的解决方案。

在翻译这本书的过程中,我努力保持了原作的准确性和可读性,同时也尽量让语言更加贴近中文读者的阅读习惯。我相信,无论是Rust的初学者还是有一定基础的开发者,都能从本书获得宝贵的知识和启发。

最后,我要特别感谢本书的二译刘畅先生,没有他的强有力帮助,就无法如此顺利地完成本书的翻译工作。同时,我也要感谢我的爱人沈平女士,以及清华大学出版社的王军老师,还有所有支持和帮助我完成这项工作的人。虽然翻译是一项既费时又费力的工作,但是每每想到能将优秀的知识传播给更多的人,我就会深感荣幸和满足。希望本书能成为读者学习Rust编程的良师益友。

愿Rust在国内的生态越来越繁荣,愿大家的代码都无bug,愿我们的技术之路越走越宽广。

关 于 作 者

Prabhu Eshwarla目前是一家初创公司的CTO,该公司正在使用Rust构建一层区块链。Prabhu对Rust编程语言有浓厚的兴趣,自2019年7月以来一直在积极地学习和研究Rust语言。他之前曾在惠普担任软件工程师和技术管理等职位。

致    谢

在快节奏的科技领域中撰写《Rust全栈开发》,无疑需要投入大量的时间和精力。

首先,我要感谢我的家人,他们牺牲了大量的时间支持我写书。我对他们的感激之情溢于言表。

同时,我还要感谢Manning出版团队的许多人,他们以各种方式帮助我,使我能够以更高的效率完成这本书的编写。我要感谢Mike Stephens给我这个宝贵的机会。感谢各位编辑,特别是Elesha Hyde,她坚定的支持、指导和耐心,帮助我克服了无数挑战,最终完成本书。非常感谢制作人员,促成了这本书最终的呈现。最后,我真诚地感谢技术编辑Alain Couniot。如果没有他们的辛勤付出,就不会有这本书。感谢Alain耐心而细致地审阅章节,改进代码和提升内容的技术质量、相关性,为读者带来更好的阅读体验!

最后,我还要感谢所有的审稿人,他们对稿件提出了宝贵的意见:Adam Wendell、Alessandro Campeis、Alex Lucas、Bojan Djurkovic、Casey Burnett、Clifford Thurber、Dan Sheikh、David Paccoud、Gustavo Gomes、Hari Khalsa、Helmut Reiterer、Jerome Meyer、Josh Sandeman、Kent R. Spillner、Marcos Oliveira、Matthew Krasnick、Michal Rutka、Pethuru Raj Chelliah、Richard Vaughan、Slavomir Furman、Stephane Negri、Tim van Deurzen、Troi Eisler、Viacheslav Koryagin、William Wheeler和Yves Dorfsman。我还要感谢MEAP的读者,他们在liveBook论坛上提了许多有趣的问题和意见,并发现了一些文字错误。

前    言

构建高性能网络服务对于任何一种编程语言来说都是挑战。Rust所具有的特性可以大大降低这些“挑战”的门槛。

事实上,Rust从一开始就被设计成一种用于高并发和安全系统的语言。尽管已有几种编程语言(如C、C++、Go、Java、JavaScript和Python)用于开发高性能和可靠的网络服务,且这些服务既可以在单个节点上运行,也可以作为多节点分布式系统的一部分,无论是在内部部署的数据中心或云中,但是以下几点仍旧让Rust成为一种更佳的选择。

●占用空间小(内存和CPU使用率完全可控)

●安全性和可靠性(编译器保障内存和数据竞争的安全性)

●低延迟(无垃圾收集器)

●现代语言特性

《Rust 全栈开发》讲授了如何通过各种工具、技术,用Rust构建高效可靠的网络服务和应用程序;还介绍了Rust中的网络服务和Web应用程序,从标准库原语构建的基本单节点、单线程服务器到高级多线程异步分布式服务器,跨越协议栈的不同层。内容涵盖:

●Rust标准库中的网络原语

●基本HTTP服务

●由关系数据库支持的REST API服务器

●P2P网络分布式服务器

●高并发异步服务器

《Rust 全栈开发》通过教程式方法讲解如何使用Rust开发Web服务和应用程序,通过一个个示例,不同的章节,逐步强化、深入。希望你能在本书中找到乐趣。本书内容丰富,可实践性强,对实际工作定有助益。

关 于 本 书

《Rust 全栈开发》并非参考指南,更像一个引言,指引大家如何利用Rust开发网络服务。本书采用实践教程的形式,最大限度地方便读者的学习和理解。

本书读者对象

《Rust 全栈开发》主要面向从事服务器端、Web后端和APl开发,或对这些感兴趣的后端软件工程师;想探索用Rust替代Go、Java或C++的分布式系统工程师;以及从事机器学习、人工智能、物联网、图像/视频/音频处理等领域的低延迟服务器、应用程序、实时系统的后端开发的软件工程师。

要想从本书中获得更大的收获,最好既有后端开发经验,又熟悉Rust。如果你是后端开发人员,最好熟练掌握Web服务概念,包括HTTP、JSON、使用ORM访问数据库以及任何高级语言(如Java、JavaScript、Python、C#、Go或Ruby)的API开发。如果你是进阶的初学者或中级Rust程序员,最好了解如何复制和修改开源教程和仓库,并熟悉Rust的以下方面:

●Rust基础(数据类型)、用户定义的数据结构(结构、枚举)、函数、表达式和控制循环(if、for和while循环)

●不可变性、所有权、引用和借用

●使用Result和Option结构进行错误处理

●Rust中的基本功能结构

●Rust工具链,包括用于构建和依赖性管理的Cargo,以及代码格式化、文档生成和自动化测试工具

更多Rust的新资讯参阅本节最后的“其他在线资源”。

本书学习路线图

《Rust 全栈开发》由一系列实践项目组成,每个项目都涉及可以选用Rust开发的特定类型的网络服务。你将通过检查代码和编写代码的方式来学习。我们会在项目中解读相关理论知识,并鼓励你尝试一些编码练习。

本书共有12章,分为三部分。第Ⅰ部分介绍了Web应用程序的基本概念,为其他部分奠定了基础。其中我们将开发一个日益复杂的Web应用程序后端,最终达到接近生产就绪的阶段。第Ⅰ部分由以下几章组成。

●第1章介绍关键概念,如分布式体系结构和Web应用程序,以及将在本书中开发的应用程序。最后,总结Rust的优势,并提供一些关于何时使用和不使用Rust的提示。

●第2章是本书其余部分的“热身”章节,会开发一些基于TCP的组件,以了解Rust在该领域的能力。

●第3章展示如何在已经存在的丰富生态系统中用Rust和crates构建RESTful Web服务(并持续迭代);解释什么是应用程序状态以及如何管理它。

●第4章论述在数据库中持久化数据的必要性,将使用一个简单但高效的与SQL数据库交互的crate。

●第5章重点讨论在调用已开发的Web服务时,应对不可预见情境的关键点。

●第6章旨在展示在用Rust开发时,随着Web服务API变得越来越强大和复杂,重构代码如何变得更加简单和安全。

第Ⅱ部分介绍处理Web应用程序的另一部分——前端及其图形用户界面(GUl)。本书采用了一种简单的方法,该方法依赖于服务器端渲染,而非在浏览器中运行的复杂Web框架。本部分由以下三章组成。

●第7章详细介绍选定的服务器端渲染框架,并阐述如何引导用户输入以及如何处理项目列表。此外,还会展示如何与第Ⅰ部分开发的后端Web服务进行交互。

●第8章着重探讨在服务器端使用的模板引擎,详细展示如何借助几个表单来实现用户注册功能。

●第9章会更加深入地介绍Web应用程序,如用户身份验证、路由,以及如何高效地使用RESTful Web服务以CRUD(创建、读取、更新、删除)的方式维护数据。

第Ⅲ部分包含三个高级主题,这些主题与前面章节已经构建的Web服务和Web应用程序没有直接关联,但对于有兴趣构建复杂的Rust服务器并为其生产部署做准备的人来说,非常重要。

●第10章介绍异步编程以及Rust如何支持异步编程范式。然后,通过几个简单的例子说明异步编程。

●第11章展示使用Rust和精选的crate开发P2P应用程序时Rust的强大功能。

●第12章详细介绍如何将Web应用程序打包成Docker映像,以便在各种环境(从本地到云端)中进行部署。

关于代码

本书的源代码可在GitHub上获取:https://github.com/peshwar9/rust-servers-services- apps。也可扫描封底二维码下载。全部代码按章节存放,且为各章代码的最终形式。

对于有Rust开发经验的人来说,配置环境应该不难:所需要的只是标准的Rust工具链和一个合适的IDE(集成开发环境),如VS Code,以及一些Rust扩展(建议使用Rust扩展包;Rust语法和Rust文档查看器也不错)。为了尽可能从GitHub和版本控制中受益,还应该安装Git,但这不是强制性的,毕竟还可以从GitHub上以zip存档的形式下载源代码。这本书包含了许多源代码的例子,既有带编号的代码清单,也有直接引用的代码。在这两种情况下,源代码都以这样固定宽度的字体进行格式化,以将其与普通文本分开。

在书中,大多原始源代码已被重新格式化;添加了换行符并重新调整了缩进,以适应排版。在极少数情况下,代码清单中还用到了换行标记(➥)。此外,若文中详细讲解过代码,则代码清单中不再对相应的源代码做注释。许多代码清单中都带有代码注释,用于突出重要概念。

其他在线资源

Rust编程语言由Rust创建者管理的优质在线资源以及其他独立资源(如Medium)提供支持。以下是一些推荐资源。

●The Rust Book——Rust开发者的官方指南(www.rust-lang.org/learn)。这本在线书籍有一个关于编写网络服务程序的部分,相对比较基础。

●Rust by Example——The Rust Book的姊妹篇(https://doc.rust-lang.org/rust-by- example/index.html)。

●The Cargo Book——另一本来自Rust官网的书,专门介绍Cargo包管理(https://doc.rust- lang.org/cargo/index.html)。

关于封面插图

本书封面上的形象源自“Homme Toungouse”,又名“通古斯人”,取自Jacques Grasset de Saint-Sauveur于1788年出版的一本合集。其中每幅插图都由手工精细绘制及着色而成。

在过去,很容易通过穿着来识别人们的居住地、职业和社会地位。Manning通过将再现几个世纪前地区文化的丰富多样性的藏画做封面,来赞颂计算机行业的创造力和积极性。