网站首页 软件下载 游戏下载 翻译软件 电子书下载 电影下载 电视剧下载 教程攻略
书名 | 从零构建RUST生产级服务 |
分类 | 教育考试-考试-计算机类 |
作者 | (美)LucaPalmieri(卢卡·帕尔米耶里) |
出版社 | 电子工业出版社 |
下载 | |
简介 | 内容推荐 本书是一本面向 Rust 后端开发人员的入门参考书,通过实际项目引导读者从 0 到 1 构建一个功能齐全的电子邮件通信API。本书涵盖了广泛的主题,包括 Rust 生态系统的利用、应用结构的设计、测试的编写、用户认证和授权、错误处理策略的实施、应用状态的观察,以及持续集成和部署管道的建立等。本书不仅介绍了具体的工具和库,还深入探讨了系统设计、可观测性和易操作性等重要概念,能够帮助读者掌握专业的开发方法。 本书适合初学者,是开启 Rust 开发之旅的理想起点,即使没有 Rust 或后端开发经验,相信你也能够轻松跟上、快速入门。 目录 第1章 准备工作\t1 1.1 安装Rust工具链\t1 1.1.1 编译目标\t1 1.1.2 发布渠道\t2 1.1.3 我们需要什么样的工具链\t2 1.2 项目初始化\t3 1.3 集成开发环境\t3 1.3.1 rust-analyzer\t4 1.3.2 IntelliJ Rust\t4 1.3.3 应该如何选择IDE\t4 1.4 内部开发循环\t5 1.4.1 更快的链接\t5 1.4.2 cargo-watch\t6 1.5 持续集成\t7 1.5.1 持续集成的步骤\t8 1.5.2 准备就绪的持续集成流水线\t10 第2章 构建邮件简报\t12 2.1 引导示例\t12 2.1.1 基于问题的学习\t12 2.1.2 帮助完善本书\t13 2.2 邮件简报服务应该做什么\t13 2.2.1 捕捉需求:用户故事\t13 2.3 循序渐进,不断迭代\t14 2.3.1 准备开始\t15 第3章 注册新的订阅者\t16 3.1 前期准备工作\t16 3.2 选择一个Web框架\t17 3.3 实现第一个端点:健康检查\t17 3.3.1 使用actix-web编写代码\t18 3.3.2 actix-web应用程序剖析\t19 3.3.3 实现健康检查处理器\t24 3.4 第一次集成测试\t27 3.4.1 如何对端点进行测试\t27 3.4.2 应该将测试放在哪里\t28 3.4.3 改变项目结构以便于测试\t30 3.5 实现第一个集成测试\t33 3.5.1 优化\t36 3.6 重新聚焦\t40 3.7 处理HTML表单\t40 3.7.1 提炼需求\t40 3.7.2 以测试的形式捕捉需求\t41 3.7.3 从POST请求中解析表单数据\t44 3.8 存储数据:数据库\t52 3.8.1 选择数据库\t52 3.8.2 选择数据库包\t53 3.8.3 带有副作用的集成测试\t55 3.8.4 数据库初始化\t56 3.8.5 编写第一个查询\t62 3.9 持久化一个新的订阅者\t70 3.9.1 actix-web中的应用程序状态\t70 3.9.2 actix-web工作进程\t72 3.9.3 Data提取器\t74 3.9.4 INSERT语句\t74 3.10 更新测试\t78 3.10.1 测试隔离\t81 3.11 总结\t85 第4章 遥测\t86 4.1 未知的未知\t86 4.2 可观测性\t87 4.3 日志\t88 4.3.1 log包\t89 4.3.2 actix-web的Logger中间件\t89 4.3.3 外观模式\t90 4.4 插桩POST /subscriptions\t92 4.4.1 与外部系统的交互\t93 4.4.2 像用户一样思考\t94 4.4.3 日志应当易于关联\t96 4.5 结构化日志\t98 4.5.1 tracing包\t99 4.5.2 从log迁移到tracing\t99 4.5.3 tracing中的跨度\t100 4.5.4 插桩future\t102 4.5.5 tracing的Subscriber\t104 4.5.6 tracing-subscriber\t105 4.5.7 tracing-bunyan-formatter\t105 4.5.8 tracing-log\t107 4.5.9 删除未使用的依赖\t109 4.5.10 清理初始化流程\t109 4.5.11 集成测试中的日志\t112 4.5.12 清理插桩代码――tracing::instrument\t116 4.5.13 保护隐私――secrecy\t119 4.5.14 请求ID\t121 4.5.15 借力tracing生态系统\t124 4.6 总结\t124 第5章 上线\t125 5.1 我们必须讨论部署问题\t125 5.2 选择工具\t126 5.2.1 虚拟化:Docker\t126 5.2.2 托管:DigitalOcean\t127 5.3 应用程序的Dockerfile\t127 5.3.1 Dockerfile\t127 5.3.2 构建上下文\t128 5.3.3 sqlx离线模式\t129 5.3.4 运行镜像\t131 5.3.5 网络\t132 5.3.6 层次化配置\t133 5.3.7 数据库连接\t138 5.3.8 优化Docker镜像\t139 5.4 部署到DigitalOcean应用平台\t144 5.4.1 安装\t144 5.4.2 应用规范\t144 5.4.3 如何使用环境变量注入加密信息\t147 5.4.4 连接到DigitalOcean的Postgres实例\t149 5.4.5 应用配置中的环境变量\t152 5.4.6 最后一步,推送\t153 第6章 拒绝无效的订阅者(第一部分)\t155 6.1 需求\t156 6.1.1 姓名约束\t156 6.1.2 安全约束\t156 6.2 第一次实现\t158 6.3 漏洞百出的验证\t159 6.4 类型驱动开发\t160 6.5 所有权遇见不变量\t164 6.5.1 AsRef\t167 6.6 panic\t169 6.7 Result――将错误作为值\t171 6.7.1 使解析函数返回Result类型\t171 6.8 准确的断言错误:claim\t174 6.9 单元测试\t175 6.10 处理 Result\t177 6.10.1 match\t177 6.10.2 “?”操作符\t178 6.10.3 400的请求错误\t179 6.11 电子邮件地址格式\t179 6.12 SubscriberEmail类型\t180 6.12.1 拆分domain子模块\t180 6.12.2 新类型的框架\t181 6.13 属性测试\t184 6.13.1 使用fake生成随机测试数据\t184 6.13.2 quickcheck与proptest\t185 6.13.3 quickcheck入门\t185 6.13.4 实现Arbitrary特质\t186 6.14 请求体验证\t188 6.14.1 使用TryFrom重构\t192 6.15 总结\t195 第7章 拒绝无效的订阅者(第二部分)\t196 7.1 确认邮件\t196 7.1.1 订阅者的同意\t196 7.1.2 确认用户的流程\t197 7.1.3 实现策略\t198 7.2 邮件发送组件――EmailClient\t198 7.2.1 如何发送电子邮件\t198 7.2.2 如何使用reqwest编写REST客户端\t201 7.2.3 如何测试REST客户端\t208 7.2.4 EmailClient::send_email的初版实现\t213 7.2.5 加强正常的测试\t221 7.2.6 处理失败情况\t228 7.3 可维护测试套件的骨架和原则\t237 7.3.1 为什么要编写测试\t238 7.3.2 为什么不编写测试\t238 7.3.3 测试代码也是代码\t238 7.3.4 测试套件\t239 7.3.5 测试发现\t240 7.3.6 每个测试文件都是一个包\t241 7.3.7 共享测试辅助函数\t241 7.3.8 共享启动逻辑\t244 7.3.9 构建API客户端\t252 7.3.10 小结\t256 7.4 重新聚焦\t256 7.5 零停机部署\t257 7.5.1 可靠性\t257 7.5.2 部署策略\t258 7.6 数据库迁移\t261 7.6.1 状态存在于应用程序之外\t261 7.6.2 部署与迁移\t261 7.6.3 多步迁移\t262 7.6.4 新的必填字段\t262 7.6.5 新表\t263 7.7 发送确认邮件\t264 7.7.1 固定的电子邮件地址\t264 7.7.2 固定的确认链接\t269 7.7.3 等待确认\t272 7.7.4 GET /subscriptions/confirm的骨架\t276 7.7.5 整合\t278 7.7.6 订阅令牌\t287 7.8 数据库事务\t294 7.8.1 全部成功,或者全部失败\t294 7.8.2 Postgres中的事务\t295 7.8.3 sqlx中的事务\t295 7.9 总结\t299 第8章 错误处理\t300 8.1 错误处理的目的\t300 8.1.1 系统内部错误\t301 8.1.2 系统交互错误\t303 8.1.3 小结\t305 8.2 为操作人员提供错误报告\t305 8.2.1 跟踪错误的根本原因\t308 8.2.2 Error特质\t313 8.3 控制流与错误处理\t316 8.3.1 控制流的分层\t316 8.3.2 使用枚举对错误建模\t317 8.3.3 只有错误类型还不够\t319 8.3.4 使用thiserror减少样板代码\t323 8.4 防止“大泥球”型的错误枚举\t324 8.4.1 使用anyhow擦除错误类型\t329 8.4.2 使用anyhow还是thiserror\t331 8.5 错误日志由谁来记\t331 8.6 总结\t333 第9章 投递邮件简报\t334 9.1 用户故事在变化\t334 9.2 不要向未确认的订阅者发送\t335 9.2.1 使用公共API设置状态\t336 9.2.2 scoped mock\t337 9.2.3 绿色测试\t338 9.3 所有已确认的订阅者都会收到新内容\t339 9.3.1 组合测试辅助函数\t339 9.4 实现策略\t341 9.5 请求体的内容\t341 9.5.1 测试无效输入\t342 9.6 获取已确认的订阅者列表\t344 9.7 发送邮件简报\t346 9.7.1 context与with_context\t347 9.8 验证存储的数据\t348 9.8.1 责任界限\t352 9.8.2 关注编译器\t353 9.8.3 移除样板代码\t355 9.9 简单方法的局限性\t356 9.10 总结\t357 第10章 API的安全性\t358 10.1 认证\t358 10.1.1 缺点\t359 10.1.2 多因素身份验证\t359 10.2 基于密码的身份验证\t359 10.2.1 基本身份验证\t360 10.2.2 密码验证――简单的方法\t365 10.2.3 密码存储\t368 10.2.4 不要阻塞异步执行器\t384 10.2.5 用户枚举\t390 10.3 这安全吗\t395 10.3.1 传输层安全性\t395 10.3.2 密码重置\t395 10.3.3 交互类型\t395 10.3.4 机器对机器\t396 10.3.5 使用浏览器的用户\t396 10.3.6 机器对机器(机器代表人)\t397 10.4 插曲:下一步计划\t397 10.5 登录表单\t398 10.5.1 提供HTML页面\t398 10.6 登录\t401 10.6.1 HTML表单\t401 10.6.2 登录成功后的重定向\t404 10.6.3 处理表单数据\t405 10.6.4 上下文错误\t412 10.7 会话\t443 10.7.1 基于会话的身份验证\t443 10.7.2 会话存储\t444 10.7.3 选择会话存储\t444 10.7.4 actix-session\t445 10.7.5 管理仪表板\t448 10.8 种子用户\t459 10.8.1 数据库迁移\t459 10.8.2 密码重置\t460 10.9 重构\t477 10.9.1 如何实现一个actix-web中间件\t478 10.10 总结\t484 第11章 容错的工作流\t486 11.1 重温POST /admin/newsletters\t486 11.2 我们的目标\t488 11.3 失败模式\t488 11.3.1 无效输入\t488 11.3.2 网络I/O\t489 11.3.3 应用程序崩溃\t490 11.3.4 作者的操作\t490 11.4 幂等简介\t490 11.4.1 幂等实践:支付\t491 11.4.2 幂等键\t492 11.4.3 并发请求\t493 11.5 测试需求(第一部分)\t493 11.6 实现策略\t495 11.6.1 有状态的幂等:保存和重放\t495 11.6.2 无状态的幂等:确定性的键生成\t495 11.6.3 时间问题有些棘手\t495 11.6.4 做出选择\t496 11.7 幂等存储\t496 11.7.1 应该使用哪种数据库\t496 11.7.2 数据库模式\t497 11.8 保存和重放\t498 11.8.1 读取幂等键\t498 11.8.2 查询已保存的响应\t502 11.8.3 保存响应\t505 11.9 并发请求\t512 11.9.1 测试需求(第二部分)\t512 11.9.2 同步\t513 11.10 处理错误\t520 11.10.1 分布式事务\t522 11.10.2 后向恢复\t522 11.10.3 前向恢复\t523 11.10.4 异步处理\t523 11.11 后记\t539 |
随便看 |
|
霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。